LEFT JOIN(或类似)在单列表上以获取每行是否在其他表中

时间:2012-09-21 16:19:40

标签: mysql join left-join

这是情况。我有两组数据。一个是我的系统使用的所有“票证”条目的列表 - 每个ID至少一个,但可能更多。我还有一个单独的列表,列出了已知硬件问题的ID,这是ID的一个相对较小(但很重要)的子集。我把这个列表放在一个超级简单的表B中,这个表就是一个只有那些ID的单列。

我需要一个连接这两个表的MySQL查询,所以我得到了表A中的所有条目,每个条目都添加了另一个字段,这是一个简单的布尔值:表B中是否存在相同的ID。

这样的事情:

SELECT * FROM `table_A` A
LEFT JOIN `table_B` B ON A.id=B.id

如果B是一个双列表,第二列(称之为down)在每行只是true,那么我可以检查down是否{{1 }或true

但由于B只有一列,因此实际上没有数据添加到结果中。

有没有简单的方法(在我的数据库中没有这个完全不必要的列)来执行这个“加入”操作,这只会注意A中给定条目的ID是否也存在于B中?

(向A添加另一个上升或下降的字段效率也相当低,因为单个ID通常有很多行,而且大多数ID都不会下降)

2 个答案:

答案 0 :(得分:3)

select 
    A.*, 
    case when B.ID is null then 0 else 1 end as myBoolean
from `table_A` A
    left join `table_B` B on A.ID = B.ID

答案 1 :(得分:2)

如果表格中存在id

,则下面的示例“down”将不为null
SELECT * , B.id as `down` FROM `table_A` A
LEFT JOIN `table_B` B ON A.id=B.id