2011-12-20 357 views
1

我試圖在MySQL(phpmyadmin)和PHP上運行嵌套查詢,並且兩者都導致相同的輸出,這是不正確的。MySQL查詢嵌套查詢

注:表的名字已經被削波,由於項目

SELECT * FROM `table1` WHERE ID="SELECT `field1` FROM `table2` WHERE ID=1" 

這將返回零行的敏感性,雖然每個查詢單獨給出如下

SELECT `field1` FROM `table2` WHERE ID=1 

給出所需的輸出有效輸出,並且在主要查詢的第一部分中使用時此輸出還提供了所需的內容。請幫忙。

+3

如果只有表名可以放棄它,則必須非常*敏感。 :) – GolezTrol 2011-12-20 21:03:19

回答

5

請勿將其放在引號中。相反,它括在括號:

SELECT * FROM `table1` WHERE ID=(SELECT `field1` FROM `table2` WHERE ID=1) 

如果多行從預期的子查詢,使用WHERE ID IN (SELECT...)代替WHERE ID=(SELECT...)

你可能有一個JOIN雖然獲得更好的性能:

SELECT table1.* 
FROM 
    table1 JOIN table2 ON table1.ID = table2.field1 
WHERE table1.ID = 1 
+0

只是想通了:)。謝謝。兩分鐘後我會標記爲正確答案(規則在這裏) – sikas 2011-12-20 21:04:26

2

你的嵌套查詢是錯誤的,它應該看起來像這樣:

SELECT * FROM `table1` WHERE ID in (SELECT `field1` FROM `table2` WHERE ID=1) 

在你的情況,你比較table1.ID與包含第二個查詢的字符串。