繁体   English   中英

GROUP CONCAT的替代方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM