2017-05-25 200 views
0

我的任務是在與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'

+0

什麼是原始數據庫? 'RIGHT JOIN'通常伴隨着一個條件,就像'LEFT JOIN'是...這兩個應該是相等的,只是以相反的順序。沒有條件的'RIGHT JOIN'看起來像SQL的一些特定於數據庫的擴展。 – jpmc26

+0

@ jpmc26這是一個SQLServer內部的存儲過程,不幸的是我無法提供更多關於它的信息,因爲我是新手,並且沒有創建存儲過程。而那個做的不在這裏了。 :( –

+1

我已經做了一些澄清,請檢查並確保我沒有改變你的意圖 – jpmc26

回答

1

與內部聯接相比,外部聯接爲不匹配的錶行返回附加結果行。 但是,這僅適用於與該連接的ON子句進行的匹配。 所以這個查詢實際上並沒有任何外部聯接是否有意義,因爲

  • 兩個右連接沒有ON子句,所以有沒有可能被特殊處理的匹配;和
  • 即使在兩個外連接上有ON子句,它們後面跟着匹配列上的內連接,因此這些列中具有NULL的任何行都會被內連接過濾掉。

因此,在此查詢中,您可以簡單地用INNER(在兩個數據庫中)替換RIGHT,結果保證是相同的。

+0

非常感謝! –