我有两个表,消息和用户。我想要一个查询,它从按摩表中检索所有行,而与user_id
字段NULL
的值无关。
消息表:
id, msg_date, sms_text, contact_id, user_id
'1', '2019-04-09 ', 'Hello 1', '1', '1'
'2', '2019-04-10', 'Hello 2', '1', NULL
'3', '2019-04-11', 'Hello 3', '1', '1'
用户表:
# user_id, fullname
'1', 'Manish Sijaria'
如果我执行以下查询。它不会从消息表中返回行2
。
SELECT id, message_date , msg_from, msg_to, sms_text, contact_id,
message.user_id, user.fullname
FROM message left join user on message.user_id=user.user_id
and message.contact_id=1;
上述查询的结果:-
id, message_date, sms_text, contact_id, user_id, fullname
'1', '2019-04-09', 'Hello 1', '1', '1', 'Manish Sijaria'
'3', '2019-04-11 ', 'Hello 3', '1', '1', 'Manish Sijaria'
缺少行2
,因为user_id
是NULL
。
但是我也希望消息表中带有user_id=NULL
的行。
我想要以下结果:-
id, message_date, sms_text, contact_id, user_id, fullname
'1', '2019-04-09', 'Hello 1', '1', '1', 'Manish Sijaria'
'2', '2019-04-10 ', 'Hello 2', '1', NULL, NULL
'3', '2019-04-11 ', 'Hello 3', '1', '1', 'Manish Sijaria'
请在Mysql中建议查询。
答案 0 :(得分:1)
您可以执行完全外部联接以获取所有值 请检查此answer
所以您的查询应该是
SELECT id, message_date , msg_from, msg_to, sms_text, contact_id,
message.user_id, user.fullname
FROM message left join user on message.user_id=user.user_id
and message.contact_id=1
UNION ALL
SELECT id, message_date , msg_from, msg_to, sms_text, contact_id,
message.user_id, user.fullname
FROM message right join user on message.user_id=user.user_id
and message.contact_id=1 and message.user_id is null