我有两张表 A 和 B。他们的关系是 A has_many B。
A 中的行可以在 B 中,也可以不在。
那么,如何检索 A 中的所有行,并在结果集中有一个字段说明每一行是否在 B 中?
例如,A 具有以下 id:1、2、3、4、5
B 有这些 A_id:1、2、3
所以结果集将是:
1 true
2 true
3 true
4 false
5 false
我使用 PostgreSQL,但可能无关紧要。
我有两张表 A 和 B。他们的关系是 A has_many B。
A 中的行可以在 B 中,也可以不在。
那么,如何检索 A 中的所有行,并在结果集中有一个字段说明每一行是否在 B 中?
例如,A 具有以下 id:1、2、3、4、5
B 有这些 A_id:1、2、3
所以结果集将是:
1 true
2 true
3 true
4 false
5 false
我使用 PostgreSQL,但可能无关紧要。
SELECT id,
CASE
WHEN EXISTS (SELECT *
FROM B
WHERE B.A_id = A.id) THEN 'True'
ELSE 'False'
END AS InB
FROM A
select distinct
a.id,
case when b.a_id is null then 'false' else 'true'
from
a left join b on b.a_id = a.id
只需使用左外连接。
例如:
CREATE TABLE a (a_id INTEGER);
CREATE TABLE b (b_id INTEGER, a_id INTEGER);
INSERT INTO a(a_id)
VALUES (1), (2), (3);
INSERT INTO b(b_id,a_id)
VALUES (1,3);
select a.a_id,
CASE WHEN b.a_id IS NULL THEN 'FALSE' ELSE 'TRUE' END
from a
left join b
on b.a_id = a.a_id;
result:
1|FALSE
2|FALSE
3|TRUE