我有两张桌子A和B. 他们的关系是A has_many B。
A中的行可以在B中,也可以不在。
那么,如何检索A中的所有行,并在结果集中有一个字段,如果它在B中,则表示每行?
例如,A有这些ID:1,2,3,4,5
B有这些A_ids:1,2,3
所以结果集将是:
1 true
2 true
3 true
4 false
5 false
我使用PostgreSQL,但也许它无关紧要。
答案 0 :(得分:1)
SELECT id,
CASE
WHEN EXISTS (SELECT *
FROM B
WHERE B.A_id = A.id) THEN 'True'
ELSE 'False'
END AS InB
FROM A
答案 1 :(得分:0)
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
答案 2 :(得分:0)
只需使用左外连接。
例如:
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