【发布时间】:2018-02-22 18:01:51
【问题描述】:
这 2 个查询在相同的条件下获取相同的列。但结果仍然不同:
第一次使用联接:
select
s.codice as codice,
n.ragione_sociale as ragione_sociale
from
parco_veicoli pv
right join
noleggiatori n on pv.id_noleggiatore = n.id
right join
sedi s on pv.id_sede = s.id
order by codice, ragione_sociale;
第一个查询总共输出 1323 行。
没有连接的第二个:
SELECT
s.codice as codice,
n.ragione_sociale as ragione_sociale
FROM
parco_veicoli pv,
noleggiatori n,
sedi s
WHERE
pv.id_sede = s.id AND
pv.id_noleggiatore = n.id
order by codice, ragione_sociale;
第二个查询总共输出 1321 行。
问题:
谁能告诉我这两个查询的含义是相同的还是不同的?
因为输出几乎相同,但只有结果集(行)的第二个查询比第一个查询少。
【问题讨论】:
-
你试过执行这两个查询吗?
-
是的,我在 pg 管理控制台中尝试过。输出几乎与第二个查询的输出中的行数少于第一个查询的行数相同。
-
第一个查询返回
sedi中的所有行,即使它在表parco_veicoli中没有匹配项。但是,第二个查询是INNER JOIN的旧语法,它仅在存在满足条件的匹配行时才显示行。 -
是的第一个查询返回来自 sedi 的所有代码。但在第二个查询中,所有代码都不存在。你能解释一下哪个更好吗?
-
postgresql.org/docs/current/static/sql-select.html#SQL-FROM section join_type
标签: postgresql