检查表b中是否存在主键

时间:2018-06-16 19:15:42

标签: mysql sql node.js

表A: ID,姓名等

表B: ID,TableA-ID。

SELECT * FROM A;

我希望在这个条件的相同结果中返回一个布尔值(如果表B中存在A.ID)。

2 个答案:

答案 0 :(得分:3)

有几种方法可以实现您的需求。以下是三种可能性。这些都有不同的执行计划以及数据库实际上如何执行它们,因此根据您的记录计数,一个可能比另一个更有效。如果你亲眼看到它会更好。

1)使用LEFT JOIN并检查B中的非空字段是否为空以确保记录存在。如果关系为1:N,则应用DISTINCT子句仅显示A中没有重复的行。

select distinct a.*, b.id is not null as exists_b
from a
left join b on
  a.id = b.tablea-id

2)使用exists()函数,将对从表A返回的每一行进行评估。

select a.*, exists(select 1 from b where a.id = b.tablea-id) as exists_b
from a

3)使用子查询表达式EXISTS的组合以及它在两个查询中的矛盾来检查记录是否在表B中有匹配。然后{ {1}}将两个结果合并为一个。

UNION ALL

答案 1 :(得分:2)

select A.*, IFNULL((select 1 from B where B.TableA-ID = A.ID limit 1),0) as `exists` from A;

如果密钥存在,上述语句将导致1,如果该密钥不存在,则结果为0。如果B

中有多个记录,限制1很重要