mysql query - where 子句仅对特定字段的选择有效

mysql query - where clause active only for the selection of a particular field

假设我们有 2 个表:

t1:包含列 t1.doc_id,... 看起来像这样:

t1.doc_id
1
2
3
4

t2:包含列 t2.from_doc_idt2.to_doc_id , t2.flag, ... 看起来像这样

from_doc_id to_doc_id flag
1 100 null
1 101 null
2 100 null
3 8 set

我想得到这样的查询结果:

t1.doc_id refs
1 100, 101
2 100
3

基本上,无论 flagnull,我想收集所有 to_doc_id,如果 flag 不是 null,我想将它们连接成一个字符串。就像上面例子中的前两个结果。

如果flag不为null(如t2示例中的第三行),我仍然想在查询结果中获取3,但是refs字段不应包含 8.

有一个查询:

SELECT t1.doc_id, group_concat(t2.to_doc_id) AS refs
FROM t1
LEFT OUTER JOIN t2 ON t2.from_doc_id = t1.id 
WHERE t2.flag is null

...我完全错过了最后一行,我只得到了预期结果的前两行。

所以我想,我想要的是在 group_concat 中使用 WHERE t2.flag is null,但是当我得到 t1.doc_id 值时忽略 t2.flag。

你可以在GROUP_CONCAT

里面使用CASE
SELECT from_doc_id
      ,group_concat(CASE WHEN flag IS NULL THEN to_doc_id ELSE '' END) AS refs
FROM yourtable t1
JOIN yourtable2 t2 ON t1.doc_id = t2.from_doc_id
GROUP BY from_doc_id

Demo on db<>fiddle