2013-07-09 169 views
0

我有一個SQL查詢問題。我有這個疑問:多個'IN'子句

SELECT * FROM serie WHERE serie_id IN 
(SELECT serie_id FROM L WHERE L_value = 33 AND I_value >= 0,1) 
AND serie_id IN (SELECT serie_id FROM clusterserie WHERE cluster_id LIKE 'RF%') ; 

我想用2 IN子句在這個查詢,因爲我要檢查該字段serie_id履行2級的要求。 任何人都知道這個查詢中出了什麼問題? 感謝和問候!

+0

當你執行的查詢是否收到錯誤?它以前如何? –

+2

我在這裏看到一個問題:'AND I_value> = 0,1' ......除非那是我從未聽說過的東西。 – Travesty3

+1

加入子選擇? –

回答

4

試着加入的子查詢像下面

SELECT b.* FROM serie b 
inner join L a on (a.serie_id = b.serie_id) 
inner join clusterserie c on (c.serie_id = b.serie_id) 
WHERE c.cluster_id LIKE 'RF%' 
AND a.L_value = 33 AND a.I_value >= 0 
+0

這在MySQL中有什麼作用:'a.I_value> = 0,1'?我不熟悉語法。 – user2480596

+0

我會'SELECT b。* ...',因爲OP似乎只需要來自'serie'的數據。 +1:連接優於子查詢(imho)。 – iamnotmaynard

+0

對不起,我剛剛複製上面的查詢,所以留在> = 0,1在那裏,我已經將它設置爲> = 0作爲1> 0,所以沒有必要在那裏 –

0

它看起來像你有一個語法錯誤的位置:

AND I_value >= 0,1) 

不知道什麼是應該的意思。

而且,您的查詢會從避免子查詢大大受益,而是使用聯接:

SELECT 
    s.* 
FROM 
    serie s 
    INNER JOIN L 
     ON s.serie_id = L.serie_id 
    INNER JOIN clusterserie cs 
     ON s.serie_id = cs.serie_id 
WHERE 
    L.L_value = 33 
    AND L.I_value >= 0 /* or whatever this is supposed to be */ 
    AND cs.cluster_id LIKE 'RF%'