2010-09-27 128 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