1

A と B の 2 つのテーブルがあります。それらの関係は 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

左外側の結合を使用するだけです。

例えば:

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 に答える
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 に答える