Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 显示表中是否有一行的结果集_Sql_Postgresql_Activerecord - Fatal编程技术网

Sql 显示表中是否有一行的结果集

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 *

我有两张桌子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 *
                      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语句看起来像什么呢?