1

我有两张表 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,但可能无关紧要。

4

3 回答 3

1
SELECT id,
       CASE
         WHEN EXISTS (SELECT *
                      FROM   B
                      WHERE  B.A_id = A.id) THEN 'True'
         ELSE 'False'
       END AS InB
FROM   A 
于 2013-02-18T16:45:57.823 回答
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
于 2013-02-18T16:47:32.537 回答
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
于 2013-02-18T16:50:43.913 回答