Sql 在Postgres联接查询中区分null和empty

Sql 在Postgres联接查询中区分null和empty,sql,database,postgresql,join,postgresql-9.4,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

如果我有这样的表格:

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)
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=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=4;
 id | name | value 
----+------+-------
(0 rows)
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
)和空结果(
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
子句中使用逗号。始终,始终使用正确、明确的
连接
语法。

使用
左连接如何

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
子句中使用逗号。始终,始终使用正确的显式
连接
语法。

您是否尝试了表t1的
外部连接
?它将返回t1中的所有记录您是否尝试了表t1的
外部联接
?它将返回t1中的所有记录您的意思是
选择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其中t1.id=1(第二个左连接)。另外,你是否建议不要像我在原来的问题中那样通过
WHERE
子句执行
JOIN
FROM
子句中的逗号已经过时20多年了。我从
注释中理解了
,谢谢。我问的是正确的显式
JOIN
部分。你的意思是
从t1左JOIN中选择t1.id,t1.name,t2.value在t1.id=t\u JOIN.t1\u id在t2.id=t\u JOIN.t2\u id,其中t1.id=1(第二个左连接)。另外,你是否建议不要像我在原来的问题中那样通过
WHERE
子句执行
JOIN
FROM
子句中的逗号已经过时20多年了。我从
注释中理解了
,谢谢。我问的是正确的显式
JOIN
部分。