2015-11-16 30 views
0

我知道這可能是一個重複的問題,但我無法想出它,找不到正確的示例。MySQL上的子查詢

我試圖做一個子查詢從表中選擇一個id爲x,y或z的元素,並從該選擇中選擇一個區域爲xx,yy或zz的元素。

這會是查詢:

SELECT * FROM establecimientos 
INNER JOIN subtipos ON (establecimientos.subtipos_idsubtipo = subtipos.idsubtipo) 
WHERE subtipos_idsubtipo = 11 OR subtipos_idsubtipo = 12 OR subtipos_idsubtipo = 13 OR subtipos_idsubtipo = 14 
AND zonas_idzona in 
(SELECT * FROM establecimientos 
WHERE zonas_idzona = 2 OR zonas_idzona = 3 OR zonas_idzona = 4 OR zonas_idzona = 5 OR zonas_idzona = 6 OR zonas_idzona = 7 OR zonas_idzona = 8) 
LIMIT 0, 90 

但我得到的錯誤only a single result allowed for a SELECT that is part of an expression

我大傷腦筋我!謝謝!

回答

1

這是

... zonas IN (SELECT * FROM ...) 
        ^---here 

子查詢返回多個領域的每一個結果行,這意味着DB具有絕對不知道哪個這些領域的,應該使用具有zonas比較。

將其更改爲

... zonas IN (SELECT specific_field FROM ...) 
         ^^^^^^^^^^^^^^---changed 

代替。

1

您需要更新子查詢才能拉出您將要使用的字段。

更改此:

SELECT * FROM establecimientos 
WHERE zonas_idzona = 2 OR zonas_idzona = 3 OR zonas_idzona = 4 OR zonas_idzona = 5 OR zonas_idzona = 6 OR zonas_idzona = 7 OR zonas_idzona = 8 

到:

SELECT <Field Name> FROM establecimientos 
WHERE zonas_idzona = 2 OR zonas_idzona = 3 OR zonas_idzona = 4 OR zonas_idzona = 5 OR zonas_idzona = 6 OR zonas_idzona = 7 OR zonas_idzona = 8