[英]Php, MySql Join two tables and show all records with and without relationship
我一直在努力寻找这个查询:
我有两个表:
Labels
id name
====================
1 Inbox
2 Sent
3 Trash
Messages
id label_id user_id name status
===============================================================
1 1 1 My First Message 1
2 1 1 My Second Message 1
3 2 1 My Third Message 1
4 0 1 My Fourth Message 1
5 0 1 My Fifth Message 1
这是我的查询:
SELECT
m.name,
m.id,
m.label_id,
l.name AS labelname
FROM
`Messages` m
LEFT JOIN `Labels` l
ON l.id = m.label_id
WHERE m.user_id = 1
AND m.status = 1;
理想的结果是显示所有标签,而不考虑匹配的消息label_id
就像是:
Inbox
=================
My First Message
My Second Message
==================
Sent
=================
My Third Message
=================
Trash
=================
=================
My Fourth Message
My Fifth Message
=================
如您所见,最后两个消息没有任何label_id,但是我仍然想在末尾显示它们以及“垃圾箱”标签,该标签目前未分配任何内容。
您的查询:
(
SELECT m.name, m.id, m.label_id, l.name AS labelname
FROM `Messages` m
LEFT JOIN `Labels` l
ON l.id = m.label_id
WHERE m.user_id = 1
AND m.status = 1
)
UNION
(
SELECT m.name, m.id, m.label_id, l.name AS labelname
FROM `Labels` l
LEFT JOIN `Messages` m
ON l.id = m.label_id AND m.user_id = 1 AND m.status =1
)
使用UNION
将原始结果与反向 LEFT JOIN
结果合并。
请注意不同的ON
条件:在第二个SELECT
使用WHERE
会导致假结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.