我有以下数据
customer_id | text | i
---------------------------
001 | hi | 0
001 | all | 1
002 | do | 0
002 | not | 0
003 | copy | 0
在我的查询中,我group_concat
文字的值,所以我应该得到像这样的结果
customer_id | text
---------------------------
001 | hi all
002 | do not
003 | copy
现在我只想要group_concat customer_ids,即使有1个记录我已经设置为1,而我可以轻松地做到当customer_id 001有两个记录时i值设置为1当只有1个已设置时我只得到该
导致上述数据的情况就是首先客户001只有“hi”但是一段时间之后“全部”被添加,所以我现在想用这个数据更新客户
有一个客户表有客户ID但是我不能在客户ID上设置更新标志,因为该表有不同的数据需要更长的时间来处理,而上面的数据是针对一个单独的系统
我的查询目前看起来像
SELECT GROUP_CONCAT(text,' ') FROM table
WHERE i = 1
GROUP BY customer_id
为了让customer_id 001返回“hi all”,当2个记录的i值中只有1个为1而同时没有从customer_id的002或003获取任何内容时,我需要做些什么
答案 0 :(得分:1)
我不确定你的意思是“没有从顾客002和003得到任何东西”。以下过滤掉它们:
SELECT GROUP_CONCAT(text,' ')
FROM table
GROUP BY customer_id
HAVING max(i) = 1;
答案 1 :(得分:1)
您可以使用EXIST()
SELECT customer_id, GROUP_CONCAT(text SEPARATOR ' ') result
FROM tableName a
WHERE EXISTS
(
SELECT 1
FROM tableName b
WHERE a.customer_id = b.customer_id AND b.i = 1
)
GROUP BY customer_id
答案 2 :(得分:1)
您可以连接所有值,并获得总i
值。然后你可以通过这个字段进行过滤,知道如果该组中至少有一个有1,它就会出现
selec customer_id, text from
(SELECT customer_id, GROUP_CONCAT(text,' ') as text, sum(i) as total FROM table
WHERE i = 1
GROUP BY customer_id) T
where total > 0