使用join从表中检索数据

时间:2014-07-01 12:03:16

标签: mysql sql

我有两个表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的行。

我该怎么做?我希望这些问题是可以理解的。

3 个答案:

答案 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

因此,根据您所要求的条件,不会有任何数据。

希望它有所帮助。

由于