mysql - GROUP CONCAT 的替代方案

标签 mysql sql select

我偶然发现了这个问题,但似乎无法掌握它的窍门。 我有三个表:

MSG_V3_THREAD

enter image description here

MSG_V3_THREAD_USERS

enter image description here

MSG_V3_THREAD_PARTNERS

enter image description here

现在,我需要做的就是最终得到这张表:

enter image description here

(注意:以上图片是经过 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

结果是这样的:

enter image description here

它只是将所有 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/

相关文章:

MySQL在子查询中引用行

mysql - SQL 按字段值排序

php - 重新排列数据库表项目顺序的最佳方法?

mysql - 从数据库表中获取最后一条和第一条记录的替代方法

mysql - 使用 Elasticsearch 5 按特定值排序或排序

php - mysql按记录集数量最少的组选择语句

c# - SQL Server 添加字符串值时列名无效

sql - 根据数据向现有列添加标识值

php - MySQL:将分钟转换为小时和分钟

sql - 如何仅选择公共(public)列将记录从一个表插入到另一个表