我试图获取所有可用的密钥,意味着已经返回的密钥(return_date不为空),密钥没有丢失(lost_key = false),并且之前从未租用过密钥(id为null)。但是当我运行这个时,我得到了0个记录。如果我删除了id条件,我只获得之前已经租用的密钥,并且忽略了不在keyActivity表中的所有密钥。有谁知道我做错了什么?
SELECT a.key_id, a.drawer_num
FROM
keys AS a
left outer JOIN keyActivity AS b
ON a.key_id = b.key_id
WHERE
return_date is not null
and lost_key =false
and id is null;
使用的解决方案:
SELECT a.key_id, a.drawer_num
FROM keys AS a LEFT JOIN keyActivity AS b ON a.key_id = b.key_id
WHERE (b.return_date is not null
and b.lost_key =false)
OR b.id is null;
答案 0 :(得分:1)
id
可能是两个表中的字段,如果是这样,那么您的条件id is null
将被错误地解释为id
的{{1}}为{{ 1}},从而导致结果集为空。
如果您使用其全名(即keys
)进行调用,它应该有效,因为您要排除之前的任何NULL
。
但是,我也相信您希望以前的条件由b.id
和括号连接,然后由keyActivity
连接的最后一个条件,因为以前的关键活动是正常的,只要密钥有已经归还了。
AND
编辑:我重新安排了这些条件,同时也解决了职员在丢失密钥之前丢失密钥的情况。