sql查询:如何正确使用右外连接

bvuwiixz  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(257)

我得去登记和定价。

CREATE TABLE [dbo].[Register](
[RegisterID] [int] NULL,
[GroupID] [int] NULL,
[TestID] [int] NULL)

CREATE TABLE [dbo].[Price](
[ID] [int] NULL,
[GroupID] [int] NULL,
[Price] [bigint] NULL,
[Status] [bit] NULL)


假设信息与上图相似,请考虑以下查询

SELECT        Price.*
FROM            Register RIGHT OUTER JOIN Price ON Register.GroupID = Price.GroupID
WHERE        (Price.Status = 1) AND (Register.TestID = 50)

输出将显示如下。

我的期望是price表的第一行和第二行将被显示。那么,我的错误在哪里?我应该如何更改查询以获得正确的输出?

j7dteeu8

j7dteeu81#

限制 Register 当前出现在 WHERE 条款必须移至 ON 子句以获得所需的行为:

SELECT p.*
FROM Register r
RIGHT JOIN Price p ON r.GroupID = p.GroupID AND r.TestID = 50;
WHERE p.Status = 1

请注意,更典型的情况是,您可以通过左连接来表达上述内容:

SELECT p.*
FROM Price p
LEFT JOIN Register r ON r.GroupID = p.GroupID AND r.TestID = 50
WHERE p.Status = 1;

相关问题