我正在與別人的代碼苦苦掙扎。 WHERE子句在以下(MySQL)語句中可以做什麼?SQL「IN」與WHERE子句中的「=」相結合
SELECT * FROM t1, t2 WHERE t1.id = t2.id IN (1,2,3)
它沒有提供我想要的結果,但我試圖找出原作者的意圖。 任何人都可以提供使用這樣的WHERE子句的例子嗎?
我正在與別人的代碼苦苦掙扎。 WHERE子句在以下(MySQL)語句中可以做什麼?SQL「IN」與WHERE子句中的「=」相結合
SELECT * FROM t1, t2 WHERE t1.id = t2.id IN (1,2,3)
它沒有提供我想要的結果,但我試圖找出原作者的意圖。 任何人都可以提供使用這樣的WHERE子句的例子嗎?
這種情況從右側開始,評估t2.id IN (1,2,3)
,得到結果(0或1),並將它用於與t1.id
聯接。來自IN
列表的所有行t2
與id
都連接到t1
的行中,該行具有一個id
; t2
的所有其他行與t1
中具有零的id
的行連接。這是sqlfiddle.com的小演示:link。
但很難想象這是作者的意圖,但是:我認爲更有可能的檢查是兩個項目都在列表中,並且也相互平等。彼此之間的平等很重要,因爲它看起來像作者想要加入這兩個表格。
更加現代的連接方式是使用ANSI SQL語法。這是您的查詢的ANSI SQL等價的:
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id IN (1,2,3)
有趣的是,在記者頁面http://dev.mysql.com/doc/refman/5.5/en/operator-precedence.html甚至沒有關於關聯性的單詞(來自我的+1 ) – zerkms
我認爲這是另一種方式... IN首先被評估,然後它的結果被用於連接。見http://sqlfiddle.com/#!2/6f2f5/1 – AndreKR
@AndreKR我認爲你是對的 - 它看起來像'IN'具有比'='更高的優先級。我不知道爲什麼我認爲它是從左到右。我重寫了這個問題的答案。非常感謝你! – dasblinkenlight
你使用什麼數據庫,如果我沒看錯這個語法在SQL Server 2000中得到了支持,但不得遲 – Habib
我會說這是如果一個bug該語法實際上是允許的 –