仅当值不存在时才返回行

仅当值不存在时才返回行,第1张

仅当值不存在时才返回
SELECt *FROM reservationWHERe id NOT IN (select reservation_id      FROM reservation_log      WHERe change_type = 'cancel')

要么:

SELECt r.*FROM reservation rLEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel'WHERe l.id IS NULL

第一个版本更直观,但是我认为第二个版本通常可以获得更好的性能(假设您在联接中使用的列上有索引)。

第二个版本有效,因为

LEFT JOIN
返回第一个表中所有行的一行。当
ON
条件成功,这些行会包括从第二表中的列,就像
INNERJOIN
。当条件失败时,返回的行将包含
NULL
第二个表中的所有列。然后,
WHERe l.id ISNULL
测试将匹配这些行,因此它将查找表之间不匹配的所有行。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4905108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存