给定两个表,reservation 和reservation_log,其中reservation 包含一般预订信息,reservation_log 跟踪对预订所做的更改(包括取消),该任务是提取尚未取消的预订。一个简单的 WHERE 子句可以有效地识别已取消的预订,但在搜索未取消的记录时效果不佳。
幸运的是,可以采用两种方法来完成此任务:
此方法利用 NOT IN 子句来排除具有匹配取消的预订
SELECT * FROM reservation WHERE id NOT IN ( SELECT reservation_id FROM reservation_log WHERE change_type = 'cancel' );
另一种方法是使用 LEFT JOIN 操作。左连接检索预订表中的所有行,并包括预订日志表中的相应行(如果存在)。没有匹配取消记录的行在reservation_log 列中将具有NULL 值。然后 WHERE 子句可以过滤掉这些行。
SELECT r.* FROM reservation r LEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel' WHERE l.id IS NULL;
以上是如何从数据库中检索未取消的预订记录?的详细内容。更多信息请关注PHP中文网其他相关文章!