这两个PostgreSQL查询有什么区别?

时间:2018-02-22 04:57:55

标签: postgresql

这两个查询在相同条件下获取同一列。但结果仍然不同:

首先使用联接:

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行。

问题:

有谁可以告诉我两个查询的含义相同或不同?

因为输出几乎相同,但只有结果集(行)比第一个查询少了第二个查询。

1 个答案:

答案 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