【发布时间】:2020-12-21 12:27:49
【问题描述】:
假设我们有 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 | flag |
|---|---|---|
| 1 | 100 | null |
| 1 | 101 | null |
| 2 | 100 | null |
| 3 | 8 | set |
我想得到这样的查询结果:
| t1.doc_id | refs |
|---|---|
| 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
...我完全错过了最后一行,我只得到了预期结果的前两行。
所以我想,我想要的是在group_concat 中使用WHERE t2.flag is null,但是当我得到t1.doc_id 值时忽略t2.flag。
【问题讨论】:
标签: mysql group-concat