如何解决mysql 查询 - where 子句仅用于选择特定字段
假设我们有 2 个表:
t1:带有 t1.doc_id 列,... 看起来像这样:
t1.doc_id |
---|
1 |
2 |
3 |
4 |
t2:包含列 t2.from_doc_id、t2.to_doc_id、t2.flag、... 看起来像这样
from_doc_id | to_doc_id | 标志 |
---|---|---|
1 | 100 | 空 |
1 | 101 | 空 |
2 | 100 | 空 |
3 | 8 | 设置 |
我想得到这样的查询结果:
t1.doc_id | 参考 |
---|---|
1 | 100,101 |
2 | 100 |
3 |
基本上,无论 flag
是 null
,我想收集所有 to_doc_id
并将它们连接到一个字符串中,如果 flag
不是 null
。就像上面例子中的前两个结果一样。
如果 flag
不为空(如 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
...我完全错过了最后一行,我只得到了预期结果中的前两行。
所以我想,我想要的是在 WHERE t2.flag is null
中使用 group_concat
,但是在获得 t1.doc_id
值时忽略 t2.flag。
解决方法
您可以在 CASE
内使用 GROUP_CONCAT
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。