考慮以下查詢:條件聯接基於多個屬性,優化
SELECT
*
FROM Employees E
JOIN States S ON E.idEmployee = S.idEmployee
LEFT JOIN Data1 D1 ON S.data1 = D1.data1
LEFT JOIN Data2 D2 ON S.data2 = D2.data2
LEFT JOIN Data3 D3 ON S.data3 = D3.data3
WHERE (S.idStateType = 1 and D1.attribute1 = value)
OR (S.idStateType = 2 and D2.attribute2 = value and D2.attribute3 = value)
OR (S.idStateType = 3 and (D1.attribute1 = value or D3.attribute3 = value))
第二加入(表DATA2)是有效僅當S.idStateType = 2,如果是idStateType <這將成爲不必要> 2。
如果我改變連接條件以取決於idStateType,它會起作用嗎(從optimziation的角度來看,但也是設計視圖)?
它將成爲:
LEFT JOIN data2 DT ON S.idStateType = 2 AND S.data2 = D2.data2
I.e將這些條件移至「ON」子句。 – jarlh
D1.attribute1 =在哪些更改中加入常規聯接的值 – Paparazzi
@jarlh請您詳細說明一下嗎? – Leon