2017-03-02 92 views
1

这个查询应该给我取消的约会(post_appt_status_id = 3)并且没有重新预订。Mysql查询:哪里没有

SELECT appointments.id, concat_ws(' ', contacts.first_name, contacts.last_name) AS contact_name, contacts.id, appointments.start AS appt_date 
FROM 
appointments appts2 
LEFT JOIN contacts ON contacts.id = appointments.contact_id 
WHERE marketing_event_id ='740' AND appointments.company_id = '1' 
AND appointments.post_appt_status_id = '3' 
AND contacts.id NOT IN (SELECT contact_id FROM appointments WHERE appointments.start > appt_date) 
GROUP BY contacts.id 

问题在于子选择。我无法传入appt_date值以使其正常工作。我收到一个错误,它是一个未知的列。

回答

1

正如你所看到的,你不能使用这样的别名。相反,你可以完全限定列名,并从外部查询参考下表:

SELECT  appointments.id, 
      concat_ws(' ', contacts.first_name, contacts.last_name) AS 
       contact_name, 
      contacts.id, 
      appointments.start AS appt_date 
FROM  appointments appts2 
LEFT JOIN contacts ON contacts.id = appointments.contact_id 
WHERE  marketing_event_id ='740' AND 
      appointments.company_id = '1' AND 
      appointments.post_appt_status_id = '3' AND 
      contacts.id NOT IN (SELECT contact_id 
           FROM appointments 
           WHERE appointments.start > appts2.start -- Here! 
          ) 
GROUP BY contacts.id 
1

必须使用别名appts2

SELECT appointments.id, concat_ws(' ', contacts.first_name, contacts.last_name) AS contact_name, contacts.id, appointments.start AS appt_date 
FROM 
appointments appts2 
LEFT JOIN contacts ON contacts.id = appts2.contact_id 
WHERE marketing_event_id ='740' AND appts2.company_id = '1' 
AND appts2.post_appt_status_id = '3' 
AND contacts.id NOT IN (SELECT contact_id FROM appointments WHERE appointments.start > appts2.appt_date) 
GROUP BY contacts.id 
+1

完成,非常感谢您抽出宝贵时间。 –