结果集,显示一行是否在表中

时间:2013-02-18 16:34:02

标签: sql postgresql activerecord

我有两张桌子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,但也许它无关紧要。

3 个答案:

答案 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