2017-03-02 109 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

完成,非常感謝您抽出寶貴時間。 –