如何过滤特殊产品订单的行? [复制]
Posted
技术标签:
【中文标题】如何过滤特殊产品订单的行? [复制]【英文标题】:How to filter rows with orders of special product? [duplicate] 【发布时间】:2019-05-02 08:41:43 【问题描述】:有customer
表:
---+-------+------------+
id + name + region +
---+-------+------------+
还有orders
表:
---+--------------+------------+----------+----------------+
id + cusomer_id + product + price + amount_total +
---+--------------+------------+----------+----------------+
如果我想形成一个每个客户都购买过的产品列表,用“;”表示,我提出一个要求:
SELECT GROUP_CONCAT(orders.product separator ';')
FROM orders
WHERE orders.customer_id = customer.id
一切正常,但是如果我想添加一些过滤器,则会出现错误:
SELECT customers.id,
(SELECT GROUP_CONCAT(orders.product separator ';')
FROM orders
WHERE orders.customer_id = customers.id) as products
FROM customers
WHERE customers.region like 'USA'
AND products not like '%fish%'
Query Error: Error: ER_BAD_FIELD_ERROR: Unknown column 'products' in 'where clause'
db-fiddle.com
【问题讨论】:
如果products
不是您的数据库列,则不能使用
只能在 mysql 的 HAVING
子句中使用别名。将AND products not like '%fish%'
更改为HAVING products not like '%fish%'
更正的 dbfiddle:db-fiddle.com/f/nBjpgHFVPWfJEbMjR2k9uF/22
@vppy 不用担心 - 如果我作为骗子关闭,我总是会尝试提供解决方案......
@Nick 谢谢!真正支持的方法。祝你在所有项目中好运。干杯!
【参考方案1】:
如果不是您的数据库列,您不能使用
products
,您需要这样做才能完成它
SELECT customers.id,
(SELECT GROUP_CONCAT(orders.product separator ';')
FROM orders
WHERE orders.customer_id = customers.id) as products
FROM customers
WHERE customers.region like 'USA'
AND (SELECT GROUP_CONCAT(orders.product separator ';')
FROM orders
WHERE orders.customer_id = customers.id) not like '%fish%'
【讨论】:
成功了,谢谢支持。以上是关于如何过滤特殊产品订单的行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章