Sql 显示表中是否有一行的结果集
我有两张桌子A和B。 他们的关系是好的 A中的行可以在B中,也可以不在B中 那么,如何检索A中的所有行,并在结果集中有一个字段,该字段为每一行显示是否在B中 例如,A具有以下ID:1、2、3、4、5 B有这些A_id:1,2,3 因此,结果集将是:Sql 显示表中是否有一行的结果集,sql,postgresql,activerecord,Sql,Postgresql,Activerecord,我有两张桌子A和B。 他们的关系是好的 A中的行可以在B中,也可以不在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 *
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
例如:
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
只需使用左外连接 例如:
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
仔细阅读外部连接。我展示了一个使用左外连接的解决方案。也就是说,即使在另一个表中找不到任何行,也可以从一个表中获取所有行。这允许您检查可选表是否返回值或返回null,从而回答此类问题。请阅读外部联接。我展示了一个使用左外连接的解决方案。也就是说,即使在另一个表中找不到任何行,也可以从一个表中获取所有行。这允许您检查可选表是否返回值或返回null,从而回答此类问题。有趣的方法。有什么理由在外部连接上进行此操作吗?@JustBob-在SQL Server中,它被优化为半连接。不知道在PostgreSQL中是否也是如此。实际上,您不需要在Postgres中使用大小写,因为它有一个真正的布尔数据类型。@a_horse_with_No_name-很好,那么SQL语句看起来像什么呢?有趣的方法。有什么理由在外部连接上进行此操作吗?@JustBob-在SQL Server中,它被优化为半连接。不知道在PostgreSQL中是否也是如此。实际上,您不需要在Postgres中使用大小写,因为它有一个真正的布尔数据类型。@a_horse_,带_No_name-很好,那么SQL语句看起来像什么呢?