MySQL在选择时连接到列

时间:2010-07-07 13:34:12

标签: mysql

我在这里处理一些遗留数据库,我在编写搜索查询时遇到了一些麻烦。

有关的两个表格为productstours(每个产品多个)。

我的一般查询如下:

SELECT products.*, tours.* FROM products INNER JOIN tours 
ON products.id=tours.product_id
GROUP BY products.id

现在这里是我遇到麻烦的部分。 products表包含一列countries,它是国家/地区ID的管道分隔列表,如下所示:13|45|33|29|133|337。我需要返回一个products列表,例如国家/地区33

为简单起见,我可以where products.countries LIKE '%33%',但这也会返回133337。我需要使用where products.countries LIKE '%|33|%',但如果它们是第一个或最后一个,则不匹配。因此,我需要在选择时将管道附加到列值的任意一端,这样就可以得到类似的内容:

SELECT products.*, tours.*, CONCAT("|",products.countries,"|") AS country_list
FROM products INNER JOIN tours ON products.id=tours.product_id
GROUP BY products.id

但如果我尝试添加WHERE country_list LIKE '|%33%|',我会收到"undefined index: country_list"错误..

我在这里做错了什么?

2 个答案:

答案 0 :(得分:5)

您可以使用:

WHERE CONCAT("|",products.countries,"|") LIKE '%|33|%'

请注意,管道在百分号内

答案 1 :(得分:3)

在WHERE子句中不能使用别名。只是在HAVING条款中

“可以在查询选择列表中使用别名为列赋予不同的名称。您可以使用GROUP BY,ORDER BY或HAVING子句中的别名来引用列”1

所以你可以做到

HAVING country_list LIKE '|%33%|'

或者没有别名的声明,斯科特发布了。