选择时将MySQL连接到列
我在这里处理的是一个遗留数据库,在编写搜索查询时遇到了一些问题 相关的两个表是选择时将MySQL连接到列,mysql,Mysql,我在这里处理的是一个遗留数据库,在编写搜索查询时遇到了一些问题 相关的两个表是产品和旅游(每个产品有多个) 我的一般查询如下所示: SELECT products.*, tours.* FROM products INNER JOIN tours ON products.id=tours.product_id GROUP BY products.id 现在我遇到了麻烦。产品表包含一列,国家,这是一个国家id的管道分隔列表,如下所示:13 | 45 | 33 | 29 | 133 | 337。
产品
和旅游
(每个产品有多个)
我的一般查询如下所示:
SELECT products.*, tours.* FROM products INNER JOIN tours
ON products.id=tours.product_id
GROUP BY products.id
现在我遇到了麻烦。产品
表包含一列,国家
,这是一个国家id的管道分隔列表,如下所示:13 | 45 | 33 | 29 | 133 | 337
。我需要返回一个产品
的列表,例如,国家33
为简单起见,我可以使用where products.country,比如“%33%”
,但这将返回133
和337
。我需要使用where products.country,如“%|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
但是,如果我尝试添加国家/地区列表,如“|%33%|”
,我会得到一个“未定义索引:国家/地区列表”
错误
我做错了什么?您可以使用:
WHERE CONCAT("|",products.countries,"|") LIKE '%|33|%'
请注意,管道位于百分比符号内,别名在WHERE子句中不可用。只是因为有条款 可以在查询选择列表中使用别名为列指定其他名称。可以在GROUP BY、ORDER BY或HAVING子句中使用别名来引用该列 所以你可以
HAVING country_list LIKE '|%33%|'
或者Scott发布的没有别名的sament。试试WHERE products.countries,比如“%33%”、@helle,它们也会匹配
133
和337
,这是不正确的。我知道,你不能在WHERE子句中引用别名,是吗?很好,这很有效。对错误有什么解释,为什么我不能选择它?谢谢。我使用了斯科特的解决方案,但我接受这个方案,因为我认为它最好地回答了这个问题。