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_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
不为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
假设我们有 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
不为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