将左连接转换为左连接
问题描述:
我的任务是在与SQLite兼容的SQL Server存储过程中进行查询。将左连接转换为左连接
以下查询包含RIGHT JOIN
s,这是不兼容的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
S'
答
与内部联接相比,外部联接为不匹配的表行返回附加结果行。 但是,这仅适用于与该连接的ON子句进行的匹配。 所以这个查询实际上并没有任何外部联接是否有意义,因为
- 两个右连接没有ON子句,所以有没有可能被特殊处理的匹配;和
- 即使在两个外连接上有ON子句,它们后面跟着匹配列上的内连接,因此这些列中具有NULL的任何行都会被内连接过滤掉。
因此,在此查询中,您可以简单地用INNER(在两个数据库中)替换RIGHT,结果保证是相同的。
+0
非常感谢! –
什么是原始数据库? 'RIGHT JOIN'通常伴随着一个条件,就像'LEFT JOIN'是...这两个应该是相等的,只是以相反的顺序。没有条件的'RIGHT JOIN'看起来像SQL的一些特定于数据库的扩展。 – jpmc26
@ jpmc26这是一个SQLServer内部的存储过程,不幸的是我无法提供更多关于它的信息,因为我是新手,并且没有创建存储过程。而那个做的不在这里了。 :( –
我已经做了一些澄清,请检查并确保我没有改变你的意图 – jpmc26