我有3张桌子。他们如下。
1.system_user_master
________________________
user_id
user_type
user_registeration_code
user_first_name
user_last_name
2.book_appointment
-----------------------
booking_id
booking_date
puser_id
duser_id
doctor_name
3.routine_queue_patient
----------------------
queue_id
booking_id
queue_checkin_time
puser_id
duser_id
qdoctor_name
现在我想要像
这样的结果patient_registeration_code, patient_first_name, patient_last_name, booking_date, queue_checkin_time
在routine_queue_patient中,booking_id可以为null。我想要在routine_idue_patient中的所选医生的当前日期的患者列表,其中booking_id有一些值或者可以为null。如果booking_id为null则在booking_date中显示查询结果为null如果在routine_queue_patient中存在预订ID,则显示预订日期。
我已经写了查询。结果如下。
booking_date | quecheck_in_time | user_first_name | user_last_name | user_regis_code
2013-11-12 | 2013-11-12 15:50:53 | rushang | patel | rp9898 |
2013-11-12 | 2013-11-12 16:00:11 | anjana | bhatt | ab9087
rushang patel的booking_date必须为null,因为在routine_queue_patient中,rushang patel的booking_id为null,但我在rushang patel面前获得了第二条记录的预订日期。
我写的查询如下。
SELECT DISTINCT b.booking_date
, r.queue_checkin_time
, s.user_first_name
, s.user_last_name
, s.user_registeration_code
FROM routine_queue_patient r
JOIN system_user_master s
ON r.puser_id = s.user_id
JOIN book_appointment b
ON ((b.booking_id = r.booking_id) OR r.booking_id is NULL)
AND DATE(r.queue_checkin_time) = '2013-11-12'
WHERE r.qdoctor_name = 'kashyup Nanavati'
AND DATE(b.booking_date) = '2013-11-12'
由于 儒商
答案 0 :(得分:1)
与book_appointment表的连接是错误的。您不应该尝试加入null值。 使用左连接执行此操作:如果找到对应的行,它将加入,否则所有连接的表列将为空。
=>
SELECT DISTINCT b.booking_date
, r.queue_checkin_time
, s.user_first_name
, s.user_last_name
, s.user_registeration_code
FROM routine_queue_patient r
JOIN system_user_master s
ON r.puser_id = s.user_id
LEFT JOIN book_appointment b
ON (b.booking_id = r.booking_id AND DATE(b.booking_date) = '2013-11-12')
WHERE r.qdoctor_name = 'kashyup Nanavati'
AND DATE(r.queue_checkin_time) = '2013-11-12'