我在我們的一個數據庫中發現了一個視圖,該視圖在LEFT OUTER JOIN
之後有多個ON
語句。我不知道這是有效的TSQL,我甚至更疑惑它是什麼意思?與多個ON的加入意味着什麼?
2
A
回答
4
FROM強制連接順序中的ON子句。
如果在這樣
A LEFT JOIN B on A.id = B.id JOIN C on b.id = c.id
表達你想要做B INNER JOIN首先C和OUTER JOIN然後,你可以使用括號
A LEFT JOIN (B JOIN C on b.id = c.id) on A.id = B.id
括號不是必需的,你可以一個接一個地寫ON
A LEFT JOIN B JOIN C on b.id = c.id on A.id = B.id
ON子句應該在兒科關係中(first-last,sec ond - 前一個等)
它就像2 + 2 * 2
。如果預期結果爲8
,則必須編寫(2 + 2) *2
或使用逆波蘭表示法以避免含糊不清,2 2 + 2 *
。圓括號更容易被人理解,但很少使用。當我在沒有括號的行中看到幾個ON時,通常它是自動生成的代碼。
2
每個JOIN
只有一個ON
類別。 當您加入一個表時,您可能會觀察到多個ON子句,並且後續的結果爲JOIN
。
在下面的代碼中選擇語句會給你相同的結果。
CREATE TABLE #Table1
(
ID int,
Name VARCHAR(50)
)
INSERT INTO #Table1
VALUES
(1, 'ABC'),
(2, 'PQR')
CREATE TABLE #Table2
(
ID int,
Address VARCHAR(50)
)
INSERT INTO #Table2
VALUES
(1, 'Addr1'),
(2, 'Addr2')
CREATE TABLE #Table3
(
ID int,
Dept VARCHAR(5)
)
INSERT INTO #Table3
VALUES
(1, 'Dept1'),
(2, 'Dept2')
SELECT T2.ID,T1.Name,T2.Address,T3.Dept
FROM #Table1 T1
LEFT JOIN #Table2 T2 ON T1.ID=T2.ID
LEFT JOIN #Table3 T3 ON T1.ID=T3.ID
SELECT T2.ID,T1.Name,T2.Address,T3.Dept FROM #Table1 T1 LEFT JOIN #Table2 T2 LEFT JOIN #Table3 T3 ON T2.ID=T3.ID ON T1.ID=T2.ID
DROP TABLE #Table1,#Table2,#Table3
注:在第二個SELECT語句,一個人不能代替ON T2.ID=T3.ID
使用ON T1.ID=T3.ID
。這是因爲,Table1不直接與Table2/Table3連接,而是與其連接的結果。
感謝,
Swapnil
相關問題
- 1. robots.txt中的加號意味着什麼?
- 2. 多元化意味着什麼?
- 3. PREEMPTIVE_XE_DISPATCHER這意味着什麼?
- 4. Field.Index.NOT_ANALYZED_NO_NORMS意味着什麼
- 5. $這意味着什麼PHP?
- 6. 什麼===在PHP意味着
- 7. MYSQLI_NUM意味着什麼?
- 8. * | *這意味着什麼CSS?
- 9. 溢出意味着什麼?
- 10. HttpServletResponse.SC_BAD_REQUEST意味着什麼?
- 11. 什麼呢JDBC:HSQLDB:hsqlTempFiles意味着
- 12. 奎因意味着什麼?
- 13. 這是什麼意思?這意味着Ruby on Rails?
- 14. 在AngularJS中結尾意味着什麼double意味着
- 15. 這個表達意味着什麼?
- 16. 這個java泛型意味着什麼?
- 17. 這個Perl崩潰意味着什麼?
- 18. 這個表達意味着什麼:「R.string.gcm_registered」?
- 19. 這個表達意味着什麼「!!」
- 20. 〜=是什麼。在Stata意味着什麼?
- 21. 在Ruby on Rails中, - %>意味着什麼,而%>
- 22. matlab中的參數意味着什麼?
- 23. Handler.sendEmptyMessage中的零意味着什麼(0)
- 24. perl中的〜意味着什麼?
- 25. 是什麼?在Android的XML意味着
- 26. matplotlib中bar3d的zsort意味着什麼
- 27. jQuery中的$([])意味着什麼
- 28. JavaScript中的豎條意味着什麼?
- 29. Objective-C中的@意味着什麼?
- 30. preg_match中的符號意味着什麼?
這意味着你要加入的滿足的不僅僅是一個條件 – Lamak 2015-02-10 13:03:56
多個行的表你的意思是'連接表上COND1和COD2和cond3',而不是'連接表cond1上cond3上的cod2上,這將是無效 – 2015-02-10 13:04:25
@juergend不是真的說'ON','.... LEFT OUTER JOIN Table3 t3 ON t3.Id = t2.Id ON t1.Type = t4.Type'。 – Peter 2015-02-10 13:08:32