sql - 在 Postgres JOIN 查询中区分 null 和 empty

标签 sql database postgresql join postgresql-9.4

如果我有这样的表:

t1:
 id | name 
----+------
  1 | a
  2 | b
  3 | c
  4 | d

t2:
 id | value 
----+-------
 10 | xxx
 20 | yyy
 30 | zzz

t_join:
 t1_id | t2_id 
-------+-------
     1 |    10
     2 |    20
     3 |    30

t1.id=1 的 SELECT 查询如下所示:

SELECT t1.id, t1.name, t2.value FROM t1, t2,t_join WHERE t1.id=t_join.t1_id AND t2.id=t_join.t2_id AND t1.id=1;

当然还有返回:

id | name | value 
----+------+-------
  1 | a    | xxx

如果我对 id=4 做同样的事情,我什么也得不到。

 SELECT t1.id, t1.name, t2.value FROM t1, t2,t_join WHERE t1.id=t_join.t1_id AND t2.id=t_join.t2_id AND t1.id=4;
 id | name | value 
----+------+-------
(0 rows)

而且,如果我用废话 id=1234132 做同样的事情,我也什么也得不到。

SELECT t1.id, t1.name, t2.value FROM t1, t2,t_join WHERE t1.id=t_join.t1_id AND t2.id=t_join.t2_id AND t1.id=1234132;
 id | name | value 
----+------+-------
(0 rows)

有什么方法可以区分空结果 (id=4) 和 null 结果 (id=1234132)?我想我想在没有单独查询的情况下验证我正在检查的 ID 是否存在。这可能吗?

最佳答案

左连接怎么样:

SELECT t1.id, t1.name, t2.value
FROM t1 LEFT JOIN
     t_join
     ON t1.id = t_join.t1_id LEFT JOIN
     t2 
     ON t2.id = t_join.t2_id 
WHERE t1.id = 1;

如果未找到 t.id,您将不会获得任何行。如果 t2 中没有匹配项,那么您将获得一个 NULL 值。

还有一个简单的规则:永远不要FROM 子句中使用逗号。 始终始终使用正确、明确的JOIN 语法。

关于sql - 在 Postgres JOIN 查询中区分 null 和 empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43057973/

相关文章:

sql - DNN数据库错误连接IIS7

database - 使用 "minus' 操作来查找是否满足条件

sql - WHERE "table"."column"IN查询的PostgreSQL顺序

javascript - NodeJS - 异步函数内的代码乱序执行

java - 瓦丁 : commit new Items to Database (SQLContainer)

sql - Postgres 使用 `split_part` 索引

php - 我正在尝试在 Laravel 中混合数据透视表值

PostgreSQL:触发器调用带有参数的函数

sql - 使用 JSON_MODIFY 将多个对象附加到现有数组中

sql - 如何将小时、分钟和秒添加到 SQL 中的日期时间列?