[英]Alternative to GROUP CONCAT
我偶然发现了这个问题,似乎无法理解。 我有三个表:
MSG_V3_THREAD
MSG_V3_THREAD_USERS
MSG_V3_THREAD_PARTNERS
现在,我需要做的就是最终获得此表:
(注意:上面的图片是photoshop的)
我似乎找不到解决方案。 我设法做了一个group_concat
,它给了我正确的结果,但是它不是我需要的格式。 我现在也有这个查询:
SELECT msg_v3_thread.thread_id, user_id, NULL as partner_id
FROM msg_v3_thread
LEFT JOIN msg_v3_thread_users ON msg_v3_thread_users.thread_id = msg_v3_thread.thread_id
WHERE msg_v3_thread.thread_id = 3
UNION
SELECT msg_v3_thread.thread_id, partner_id, NULL as user_id
FROM msg_v3_thread
LEFT JOIN msg_v3_thread_partners ON msg_v3_thread_partners.thread_id = msg_v3_thread.thread_id
WHERE msg_v3_thread.thread_id = 3
结果如下:
它将所有ID放在一栏中。
有人可以帮我吗? 解决方法可能很简单,但我看不到。
谢谢!
您有一个正确的想法,您只需要切换要查询的显式null
。 使用union
运算符时,除第一个查询外,所有查询中的别名都将被忽略:
SELECT msg_v3_thread.thread_id, user_id, NULL as partner_id
FROM msg_v3_thread
LEFT JOIN msg_v3_thread_users ON msg_v3_thread_users.thread_id = msg_v3_thread.thread_id
WHERE msg_v3_thread.thread_id = 3
UNION
SELECT msg_v3_thread.thread_id, NULL as user_id, partner_id -- Here!
FROM msg_v3_thread
LEFT JOIN msg_v3_thread_partners ON msg_v3_thread_partners.thread_id = msg_v3_thread.thread_id
WHERE msg_v3_thread.thread_id = 3
我想您只想要这样的union
:
select thread_id, user_id, NULL as partner_id
from MSG_V3_THREAD_USERS
where thread_id = 3
union
select thread_id, NULL, partner_id
from MSG_V3_THREAD_PARTNERS
where thread_id = 3;
请注意, union
删除表内以及表之间的重复项。 您也可以这样写:
select distinct thread_id, user_id, NULL as partner_id
from MSG_V3_THREAD_USERS
where thread_id = 3
union all
select distinct thread_id, NULL, partner_id
from MSG_V3_THREAD_PARTNERS
where thread_id = 3;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.