我有一個MySQL查詢試圖獲取包含像'word%'之類的數據的所有頁面。我有一個名爲Pages2Data的多對多表。看起來,要做到這一點,我需要一個內部連接,將Pages連接到Pages2Data表,然後是另一個將Pages2Data連接到Data的內部連接。內部加入ON子句
以下方法無效,因爲嵌套的SELECT子句可以返回多行。我不知道如何解決,雖然它:
SELECT * FROM `Pages`
INNER JOIN `Pages2Data` ON
(`Pages2Data`.`DataID`=(SELECT `DataID` FROM `Data` WHERE `DataWord` LIKE 'word%'))
AND `Pages`.`PageID`=`Pages2Data`.`PageID`;
這樣做有沒有優勢,而不是沒有內部連接的JellyBelly方法? – carlbenson 2011-06-16 13:26:56
隱式連接對於維護不利(等到需要將左側jon添加到另一個表並查看我的意思),並且更可能出現錯誤,例如意外交叉連接。幾乎20年前它們被更好的語法所取代,沒有任何情況(除了支持一箇舊的數據庫,它沒有語法),我想我會支持它們在新代碼中使用的位置。從何處分離這個連接也使得它在未來變得更加清晰。 – HLGEM 2011-06-16 13:31:30
有趣......我很感謝解釋!最後一個問題:在你的查詢中,哪個子句首先被調用? Where子句或內部連接? – carlbenson 2011-06-16 13:39:46