在LEFT JOIN中转换右连接

时间:2017-05-25 07:18:15

标签: sqlite join

我的任务是在与SQLite兼容的SQL Server存储过程中进行查询。

以下查询包含RIGHT JOIN,它们与SQLite不兼容:

SELECT ...    
FROM Operatori
INNER JOIN Preventivi
   ON Operatori.Pk = Preventivi.FkOperatori
RIGHT JOIN Operatori AS Operatori_1
INNER JOIN Soluzioni
   ON Operatori_1.Pk = Soluzioni.FkOperatore
INNER JOIN Reparti
   ON Operatori_1.FkReparto = Reparti.Pk
RIGHT JOIN Progetti
INNER JOIN Anagrafica
   ON Progetti.FkClienti = Anagrafica.Pk
   AND Soluzioni.FkProgetti = Progetti.Pk
   AND Preventivi.FkSoluzioni = Soluzioni.Pk

我知道通常情况下,切换表是有效的:

离。

FROM Operatori
   RIGHT JOIN Progetti

成了:

FROM Progetti
   LEFT JOIN Reparti

但如果我在同一个查询中有其他JOIN,我怎么能进行转换?

1 个答案:

答案 0 :(得分:0)

与内部联接相比,外部联接返回表行的其他结果行而不匹配。 但是,这仅适用于与该连接的ON子句完成的匹配。 所以这个查询实际上没有任何有意义的外连接,因为

  • 两个右连接没有ON子句,因此没有可以专门处理的匹配;和
  • 即使两个外连接上有ON子句,它们之后也会匹配列上的内连接,因此这些列中任何带有NULL的行都会被内连接过滤掉。

因此,在此查询中,您可以简单地将RIGHT替换为INNER(在两个数据库中),并保证结果相同。