如何查询表A所有记录,并将表B匹配项以布尔值显示在approved字段
解决表A全量记录匹配表B ID的SQL问题
你原来的SQL用逗号直接关联两个表,会生成笛卡尔积——表A的每一行都和表B的每一行配对,所以结果行数是5×3=15行,完全不符合需求。
要实现「返回表A全部记录,标记出在表B中存在的ID」,核心是用左连接(LEFT JOIN),它会保留左表(表A)的所有记录,仅匹配右表(表B)中符合条件的行,不匹配的部分右表字段会显示NULL。
正确SQL语句(适用于Access等支持IIf的数据库)
SELECT [Source A].ID, IIf([Source B].ID IS NOT NULL, TRUE, NULL) AS MATCH FROM [Source A] LEFT JOIN [Source B] ON [Source A].ID = [Source B].ID;
另一种直观写法(用EXISTS子查询)
如果不想用连接,也可以直接用EXISTS判断当前ID是否在表B中存在:
SELECT ID, IIf(EXISTS(SELECT 1 FROM [Source B] WHERE [Source B].ID = [Source A].ID), TRUE, NULL) AS MATCH FROM [Source A];
执行结果
上述两个语句都会返回你期望的结果:
| ID | MATCH |
|---|---|
| 2 | TRUE |
| 4 | |
| 6 | TRUE |
| 8 | TRUE |
| 10 |
内容的提问来源于stack exchange,提问作者MK01111000
相关产品推荐
相关产品推荐

