2010-09-27 184 views
4

我有一個SQL查詢使用GROUP_CONCAT獲取所有人連接到特定的順序。有沒有一種方法可以在GROUP_CONCAT字段內進行搜索?使用LIKE搜索GROUP_CONCAT使用LIKE

SELECT orders.orderID, 
GROUP_CONCAT(contacts.firstName, " ", contacts.lastName) AS attachedContacts 
FROM (orders) 
JOIN contacts ON orders.contactID=contacts.contactID 
GROUP BY orders.orderID 
ORDER BY orders.orderID DESC 

我想添加類似WHERE attachedContacts LIKE '%Eric%',與「Eric的連接只列出訂單,但仍然在查詢中包含的所有其他聯繫人。

查詢返回的數據,如:

orderID atachedContacts 
01  Eric Siegel, John Smith 
02  Jason Jackson, Bill O'Neil 
03  Eric Siegel, Jason Jackson, Neil O'Ryan 

我希望查詢返回行01和03,因爲「埃裏克是在聯繫人列表中。

我該怎麼做?

回答

9

試試這個:

SELECT orders.orderID, 
GROUP_CONCAT(contacts.firstName, " ", contacts.lastName) AS attachedContacts 
FROM orders 
JOIN contacts ON orders.contactID=contacts.contactID 
GROUP BY orders.orderID DESC 
HAVING attachedContacts LIKE '%Eric%' 
+0

哇,居然成功了!我想沒有更簡單的方法來做到這一點? – 2010-09-27 19:02:55

+1

'cleaner'是有爭議的,但是你可以使用'HAVING'子句來代替我相信的子查詢,或者在'ON'子句中''LIKE'的聯繫人上使用單獨的'JOIN',但是我會測試哪個一個更好/表現更好。 – Wrikken 2010-09-27 19:06:03

+0

我不知道如何使用'HAVING',並且我發佈的查詢只是完整的一部分,那裏還有3個'JOIN'語句。 – 2010-09-27 19:09:53