2017-08-31 252 views
1

我對SQL有相當新的想理解下面的邏輯。在INNER JOIN中使用AND

SELECT * 
FROM Table A A1 
INNER JOIN TABLE B B1 ON B1.ID = A1.ID AND A1 = 'TASK'; 

不知道這是否是一個明確的細節,但請讓我知道。謝謝!

+3

你不明白什麼?這似乎很清楚。 –

+4

'AND A1 ='TASK''我相信應該有列名 – lad2025

+0

這似乎很清楚,直到我到了AND不知道該邏輯是如何工作的,謝謝@ lad2025捕捉,但我想了解如何使用AND INNER JOIN。 – sonnymoon

回答

3
SELECT * 
FROM Table A A1 
    INNER JOIN TABLE B B1 ON B1.ID = A1.ID AND A1.Column = 'TASK' 

相同

SELECT * 
FROM Table A A1 
    INNER JOIN TABLE B B1 ON B1.ID = A1.ID 
WHERE A1.Column = 'TASK' 

它甚至相同的性能明智的,它只是編寫查詢的方式不同。在非常大的查詢中,直接在INNER JOIN上使用AND而不是將其隱藏在WHERE部分中可以更易讀。

1

SELECT * - 選擇所有列

FROM表A A1 - 從表A A1就像一個暱稱你是給表A而不是鍵入A.ColumnName(A可能是一個很長的名字)你只需輸入A1.ColumnName

INNER JOIN TABLE B B1 - 你是內部加入表A和B.同樣,B1只是一個暱稱。這是一個解釋聯接的好圖片。 enter image description here

ON B1.ID = A1.ID - 這是兩個表共有的列(關係列)它們需要包含相同的數據。

和A1 =「任務」 - 這是說你要加入其中,A1表名

2

這將無法運行在所有

SELECT * 
FROM Table A A1 INNER JOIN 
    TABLE B B1 
    ON B1.ID = A1.ID AND A1 = 'TASK'; 

這將運行,因爲我加了一個列名(SomeColumn):

SELECT * 
FROM Table A A1 INNER JOIN 
    TABLE B B1 
    ON B1.ID = A1.ID AND A1.SomeColumn = 'TASK'; 

而且是相同的,因爲這

SELECT * 
FROM Table A A1 INNER JOIN 
    TABLE B B1 
    ON B1.ID = A1.ID 
WHERE A1.SomeCoumn = 'TASK'; 

每當你加入一個常量,它就像在where子句中增加一個額外的標準一樣。加入聯合的唯一原因是代碼清晰。

+0

當你說'WHERE [Table Name] ='TASK''時,這意味着什麼? – SandPiper

+0

是的,我剛剛注意到OP的錯誤並編輯了我的答案, –