1

我有以下数据

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 将两条记录都设置为 1 时我可以轻松做到

导致上述数据的情况是,起初客户 001 只有“hi”,但一段时间后添加了“all”,所以我现在想用这些数据更新客户

有一个包含客户 ID 的客户表,但是我无法在客户 ID 上设置更新标志,因为该表具有不同的数据,需要更长的时间来处理,并且上面的数据用于单独的系统

我的查询目前看起来像这样

SELECT GROUP_CONCAT(text,' ') FROM table
WHERE i = 1
GROUP BY customer_id

当 2 条记录的 i 值中只有 1 条为 1 而同时没有从 customer_id 的 002 或 003 得到任何东西时,我需要做什么才能让 customer_id 001 返回“大家好”

4

3 回答 3

1

我不确定您所说的“没有从客户 002 和 003 那里得到任何东西”是什么意思。以下将它们过滤掉:

SELECT GROUP_CONCAT(text,' ')
FROM table
GROUP BY customer_id
HAVING max(i) = 1;
于 2013-08-23T02:25:36.057 回答
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 
于 2013-08-23T02:26:08.587 回答
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
于 2013-08-23T02:26:37.087 回答