1
我想,我可能有一個誤解,多連接如何在多個表上工作。假設你有三張表A,B,C,你需要加入他們。內連接多個表
這裏是V1
SELECT A.NAME AS name1
,B.NAME AS name2
,C.NAME AS name3
FROM A
INNER JOIN B
ON A.id = B.id
INNER JOIN C
ON B.id = C.id
這裏是V2
SELECT A.NAME AS name1
,D.NAME AS name2
,D.NAME AS name3
FROM A
INNER JOIN (
SELECT B.NAME AS name2
,C.NAME AS name3
FROM B
INNER JOIN C
ON B.id = C.id
) AS D
ON A.id = D.id
是否有這兩個版本之間的性能差異? 儘管第一個查詢看起來更清晰,但我需要構建一個查詢生成器UI,將聯接限制爲只有2個表有所幫助。
那麼,作爲第一個,第二個查詢將失敗,因爲你沒有選擇內部查詢中的'Id'。但更重要的是,這些不是同一個查詢。在第一個中,你將'A'與'B'和'A'與'C'聯繫起來。第二,你將'B'關聯到'C',這在第一個查詢中不是定義的關係。不僅如此,第二個版本更難以閱讀/理解。你應該堅持第一個版本 - 它更乾淨,更易於理解。 – Siyual
@Siyual - 兩個連接中隱含的B到C關係 - 不會加入B ON A.id = B.id JOIN C ON A.id = C.id給出與JOIN B ON相同的結果A.id = B.id JOIN C ON B.id = C.id – PaulF
@PaulF在這種情況下,推斷B到C關係的唯一方法是如果您加入了「ID」字段中的表對於所有三個(這與他的例子一樣,儘管這看起來像虛擬代碼,而不是他實際使用的)。 *但是,我非常懷疑你需要在三個表中進行連接,每個表的主鍵都是相同的。如果是這樣的話,那麼是的,你可以推斷B到C的關係。但除此之外,你無法建立連接。 – Siyual