我偶然发现了这个问题,但似乎无法掌握它的窍门。 我有三个表:
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
关于mysql - GROUP CONCAT 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27319639/