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

SQL查询仅在Pisa放映电影返回无放映记录问题修正

问题根因

原查询仅通过not exists排除了「存在非Pisa城市放映记录」的电影,但没有对「电影是否有放映记录」做校验:没有任何放映场次的电影,子查询匹配不到任何非Pisa的放映记录,会被错误判定为符合条件,混入结果集。

要得到正确结果,查询逻辑需要同时满足两个判定规则:

  • 电影不存在任何在Pisa以外城市的放映记录
  • 电影至少存在1场在Pisa城市的放映记录(排除无任何放映的影片)
修正后的SQL实现

写法1:双EXISTS判定(和原逻辑兼容性最好)

SELECT f.Titolo
FROM Film f
WHERE
  -- 排除有非Pisa城市放映的电影
  NOT EXISTS (
    SELECT *
    FROM Sale s
    INNER JOIN Proiezioni p ON p.xCodSala = s.CodSala
    WHERE f.CodFilm = p.xCodFilm AND s.Citta <> 'Pisa'
  )
  -- 排除无任何放映记录的电影,要求至少有1场Pisa的放映
  AND EXISTS (
    SELECT *
    FROM Sale s
    INNER JOIN Proiezioni p ON p.xCodSala = s.CodSala
    WHERE f.CodFilm = p.xCodFilm AND s.Citta = 'Pisa'
  );

写法2:分组聚合判定(写法更简洁)

通过内连接关联放映表,天然过滤无放映记录的电影,再通过分组后的聚合判断所有放映场次是否都在Pisa:

SELECT f.Titolo
FROM Film f
INNER JOIN Proiezioni p ON f.CodFilm = p.xCodFilm
INNER JOIN Sale s ON p.xCodSala = s.CodSala
GROUP BY f.CodFilm, f.Titolo
-- 统计非Pisa的放映场次,要求数量为0
HAVING COUNT(DISTINCT CASE WHEN s.Citta <> 'Pisa' THEN 1 END) = 0;
执行结果验证

基于提供的测试数据执行上述任意一种SQL,都会返回预期的单条结果:

Titolo
I Predatori

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:39:04