2015-11-11 65 views
2

我有一個mysql查詢,我已經編寫了基於與特定組相關的ID來獲取數據庫中的一組屬性。我使用Opencart的2我的網站,我的子查詢如下:GROUP CONCAT不在子查詢中工作 - mysql

SELECT GROUP_CONCAT(attribute_id) AS attr_ids 
FROM oc79_attribute 
WHERE attribute_group_id = 13 

將返回:

44,45,46,47

當我寫這篇文章我需要得到的屬性名稱的查詢中,我只得到一個結果:

SELECT * 
FROM oc79_attribute_description 
WHERE attribute_id IN(SELECT GROUP_CONCAT(attribute_id) AS attr_ids 
         FROM oc79_attribute WHERE attribute_group_id = 13) 

我只得到個e來自attribute_id 44,而不是其他人,即使我知道記錄存在。

這是正確的方法來解決這個問題,或者我只是失去了一些東西?

編輯:

爲了澄清,如果我寫:

SELECT * FROM oc79_attribute_description WHERE attribute_id IN(44,45,46,47) 

我得到的4條正確的結果。

在此先感謝

+0

請參閱http://stackoverflow.com/a/11957706/575376 –

回答

3

沒有必要GROUP_CONCAT

SELECT * 
FROM oc79_attribute_description 
WHERE attribute_id IN(SELECT attribute_id AS attr_ids 
         FROM oc79_attribute 
         WHERE attribute_group_id = 13); 

見的區別:

WHERE attribute_id IN ('44,45,46,47')  -- one string 

WHERE attribute_id IN ('44','45','46','47') -- multiple values 

GROUP_CONCAT將返回一個字符串作爲分隔符,,您需要的是多個值。

1

如果屬性表只有每attribute_id一行,那麼你可以使用連接簡單: -

SELECT oc79_attribute_description.* 
FROM oc79_attribute_description 
INNER JOIN oc79_attribute 
ON oc79_attribute_description.attribute_id = oc79_attribute.attribute_id 
AND oc79_attribute.attribute_group_id = 13 

如果它的倍數,那麼你可以使用DISTINCT: -

SELECT DISTINCT oc79_attribute_description.* 
FROM oc79_attribute_description 
INNER JOIN oc79_attribute 
ON oc79_attribute_description.attribute_id = oc79_attribute.attribute_id 
AND oc79_attribute.attribute_group_id = 13 

如果您真的想通過一串逗號分隔值搜索(我真的會建議反對它),那麼你可以使用FIND_IN_SET: -

SELECT * 
FROM oc79_attribute_description 
WHERE FIND_IN_SET(attribute_id, (SELECT GROUP_CONCAT(attribute_id) AS attr_ids 
         FROM oc79_attribute WHERE attribute_group_id = 13))