表A: ID,姓名等
表B: ID,TableA-ID。
SELECT * FROM A;
我希望在这个条件的相同结果中返回一个布尔值(如果表B中存在A.ID)。
答案 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很重要