如何从一个表中获取所有记录,并使用其他表获取null

时间:2018-02-01 12:18:48

标签: mysql

您好我有两个表event_service和appointment_feedback event_service表中的两条记录和appointment_feedback中的一条记录 所以我希望匹配记录与event_service表和空记录 appointment_feedback。

请按照我的表结构

第一张表: event_service

....................................
evsr_id      evsr_ev_id   staff_id
....................................
  1           101             1
  2           101             2

第二张表: appoitment_feedback

....................................
fd_id    fd_app_id      fd_comment  
....................................
 1        101             test

我想要这个输出:

.................................................
evsr_id     evsr_ev_id     staff_id   fd_comment
.................................................
  1           101            1           test
  2           101            2           null

我已尝试过以下查询,但它没有给出null值,它给出了重复的注释值,即测试,但它在appointment_feedback表中只有一个条目,所以我想要来自event_service表的两条记录 来自appointment_feedback表的一条记录与之对应 记录。

SELECT appointment_feedback.`fd_id`,`fd_app_id`,`fd_comment`,`fd_service_rat` 
FROM event_service
left join `appointment_feedback`
    on event_service.evsr_ev_id=appointment_feedback.fd_app_id 
WHERE appointment_feedback.fd_app_id='3959'

此查询输出错误: -

..............................................
fd_id   fd_app_id  fd_comment fd_service_rat
.............................................
  1       101        test           0
  1       101        test           0

2 个答案:

答案 0 :(得分:1)

我使用简单的LEFT JOIN来提供请求的输出。

DECLARE @event_service AS Table
(
    evsr_id INT,
    evsr_ev_id INT,
    staff_id INT
)

DECLARE @appoitment_feedback AS Table
(
    fd_id INT,
    fd_app_id INT,
    fd_comment VARCHAR(50)
)

INSERT INTO @event_service VALUES(1,101,1)
INSERT INTO @event_service VALUES(2,101,2)

INSERT INTO @appoitment_feedback VALUES(1,101,'test')

SELECT
    es.*,
    af.fd_comment
FROM @event_service es
LEFT JOIN @appoitment_feedback af ON es.evsr_ev_id=af.fd_app_id
AND es.evsr_id=af.fd_id

<强>输出:

enter image description here

答案 1 :(得分:0)

根据你的问题,你有合适的工具,但你错过了使用它们。

这是您当前的查询:

SELECT appointment_feedback.`fd_id`,`fd_app_id`,`fd_comment`,`fd_service_rat` FROM `appointment_feedback` left join event_service on event_service.evsr_ev_id=appointment_feedback.fd_app_id WHERE appointment_feedback.fd_app_id='3959'

您需要做的就是交换表格,以便从event_service和左连接appointment_feedback中进行选择,这应该是您的新查询:

SELECT appointment_feedback.`fd_id`,`fd_app_id`,`fd_comment`,`fd_service_rat` 
FROM event_service
left join `appointment_feedback`
    on event_service.evsr_ev_id=appointment_feedback.fd_app_id 
WHERE appointment_feedback.fd_app_id='3959'
  

LEFT JOIN执行从第一个(最左侧)表开始的连接,然后是任何匹配的第二个(最右侧)表记录。

     

Left Join Image

     

Source