需要从一个表中检索所有行并与另一表联接的查询

时间:2019-04-12 11:53:31

标签: mysql

我有两个表,消息和用户。我想要一个查询,它从按摩表中检索所有行,而与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_idNULL

但是我也希望消息表中带有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中建议查询。

1 个答案:

答案 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

也请看这张图片enter image description here