这两个查询在相同条件下获取同一列。但结果仍然不同:
首先使用联接:
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行。
问题:
有谁可以告诉我两个查询的含义相同或不同?
因为输出几乎相同,但只有结果集(行)比第一个查询少了第二个查询。
答案 0 :(得分:0)
https://www.postgresql.org/docs/current/static/queries-table-expressions.html
FROM T1 CROSS JOIN T2相当于FROM T1 INNER JOIN T2 ON TRUE (见下文)。它也相当于FROM T1,T2。
和
RIGHT OUTER JOIN
首先,执行内连接。然后,对于T2中的每一行 不满足T1中任何行的连接条件,连接的行是 在T1列中添加了空值。这是一个相反的 left join:结果表在T2中的每一行总是有一行。
因此,在您的查询中,第二个是INNER
加入,第一个是RIGHT OUTER JOIN