You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 12查询未被客户租赁的电影片名SQL问题排查

问题诊断
  • 核心逻辑错误:INNER JOIN(内连接)仅保留两张表匹配成功的记录,你通过内连接关联location(租赁表)后,返回的所有行都是已经产生租赁记录的副本,id_loc 字段必然有值,WHERE id_loc IS NULL的条件永远无法命中,所以没有返回结果。
  • 冗余关联:需求仅需要判断电影是否有租赁记录,不需要关联client(客户表),这部分属于多余关联。
可用实现方案

以下两种写法均可实现需求,Oracle环境下更推荐第二种写法,执行效率更高:

写法1:LEFT JOIN + 空值判断

SELECT f.titre
FROM film f
LEFT JOIN copie c ON f.id_film = c.id_film
LEFT JOIN location l ON c.id_copie = l.id_copie
WHERE l.id_loc IS NULL;

逻辑说明:左连接会保留film表的所有电影记录,即便该电影没有对应副本、或副本没有对应的租赁记录,只要最终没有匹配到租赁记录,l.id_loc就会返回NULL,刚好匹配"从未被租赁"的筛选条件。

写法2:NOT EXISTS 子查询

SELECT f.titre
FROM film f
WHERE NOT EXISTS (
    SELECT 1
    FROM copie c
    INNER JOIN location l ON c.id_copie = l.id_copie
    WHERE c.id_film = f.id_film
);

逻辑说明:子查询会检索所有存在租赁记录的电影ID,外层查询筛选出不在这个范围内的电影,逻辑更直观,也不会出现左连接可能带来的重复行问题。

内容的提问来源于stack exchange,提问作者K3N72

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:45:03