0

我的 sql 语句在这里遇到了一个奇怪的问题。也许这是愚蠢的事情,我无法抓住它。

SELECT appointment.patient_id,
       patient.notes,
       patient.first_name,
       CONVERT(VARCHAR(27), appointment.start_time, 100),
       patient.email_address
FROM   appointment,
       patient
WHERE  Day(appointment.start_time) = 06
       AND Month(appointment.start_time) = 06
       AND Year(appointment.start_time) = 2013
       AND appointment.appointment_type_id != ''
       AND appointment.location_id != ''
       AND appointment.patient_id = patient.patient_id
       AND patient.email_address != ''; 

上面的查询返回 3 条记录。'notes' 字段的值在所有 3 条记录中均为 NULL。如果我添加一个条件patient.notes != '1 Reminder',它不应该返回相同的结果集吗?当我尝试它时,它返回零记录。有人可以解释为什么吗?

4

2 回答 2

2

不,你的期望是错误的。与 的任何比较NULL都是 NULL(视为假),但IS NULL.

所以,patient.notes != '1 Reminder'是假的,就像patient.notes = '1 Reminder'是假的一样。您可以通过以下方式处理此问题:

coalesce(patient.notes, '') != '1 Reminder'
于 2013-06-05T18:14:27.023 回答
1

!= 运算符不会在 NULL 值上解析为 true。要获取除“1 Reminder”以外的记录(包括NULL),请使用“patient.notes != '1 Reminder' or patient.notes IS NULL”。

于 2013-06-05T18:15:41.597 回答