我有两个表X和Y,我想从表Y返回X.id=Y.id
和表X的数据,我想只返回那些X.id!=Y.id
的行。
我写了一个查询
Select * from X left join Y on X.id=Y.id
但是这会返回表格X中的所有行,因为我只想要那些X.id!=Y.id
的行。
我该怎么做?我希望这些问题是可以理解的。
答案 0 :(得分:0)
X中存在id的所有Y行:
SELECT Y.*
FROM Y
INNER JOIN X
USING(id)
在Y
中没有现有ID的所有X行SELECT X.*
FROM X
WHERE id NOT IN (
SELECT id
FROM Y
)
如果输出列相同,则可以对两个查询执行UNION。
答案 1 :(得分:0)
select * from X right join Y on X.ID=Y.ID
OR
select * from Y left join X on X.ID=Y.ID
然后你得到Y中的所有行和X-table中引用的行以及X-table中引用Y的所有数据。
这是你的问题吗?
我在这个问题中可以看到的其他答案是
with cte (X.ID,Y.ID)
as(
select x.ID,y.ID from X INNER JOIN Y ON X.ID=Y.ID
)
select * from Y JOIN cte
where t.id not in (cte.Y.ID)
UNION ALL
select * from cte
类似的东西(可能需要一些没有SQL管理或SQL Developper的调试:))
答案 2 :(得分:0)
假设我们提到了两个表: -
从cmp_Company中选择*为x
从cmp_Company_Contact中选择*作为y
案例A:[从Y表返回的所有行]
选择 Y. * 从 cmp_Company_Contact为Y. LEFT JOIN cmp_Company为X ON X.CO_ID = Y.CO_ID 哪里 X.CO_ID = Y.CO_ID
案例B:[从X表中没有返回任何行]
选择 X.CO_Name 从 cmp_Company为X. LEFT JOIN cmp_Company_Contact为Y ON Y.CO_ID = X.CO_ID 哪里 X.CO_ID!= Y.CO_ID
因此,根据您所要求的条件,不会有任何数据。
希望它有所帮助。
由于