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

如何用SQL查询同时在两家指定门店有库存的DVD

解决方法:查询同时在两家门店有库存的DVD

嘿,我来帮你搞定这个问题!你的SQL语句之所以返回的是任意一家门店有货的DVD,是因为你的EXISTS条件逻辑不对——你现在检查的是这两个门店是否存在(而不是该DVD在这两个门店都有库存),而Store表本身就有这两个门店,所以这两个条件永远为真,相当于没有做过滤。

下面给你两种靠谱的解法,你可以根据自己的习惯选择:

方法一:使用GROUP BY + HAVING(直观易读)

这种方法先筛选出目标门店的库存记录,然后按DVD分组,确保该DVD在两个门店都有库存:

SELECT d.DVD_CODE, d.DVD_NAME
FROM DVD d
JOIN Catalogue c ON d.DVD_CODE = c.DVD_CODE
JOIN Store s ON c.STORE_CODE = s.STORE_CODE
WHERE s.LOCATION IN ('Bogota', 'Buenos Aires')
GROUP BY d.DVD_CODE, d.DVD_NAME
HAVING COUNT(DISTINCT s.STORE_CODE) = 2;

逻辑解释:

  1. WHERE子句先过滤出仅来自Bogota和Buenos Aires的库存记录
  2. 按DVD的编码和名称分组后,COUNT(DISTINCT s.STORE_CODE)统计该DVD覆盖的不同门店数量
  3. 当数量等于2时,说明这个DVD在两家门店都有库存记录

方法二:使用双重EXISTS(逻辑直接)

这种方法通过两个独立的子查询,分别验证该DVD在两家门店都有库存:

SELECT DISTINCT d.DVD_CODE, d.DVD_NAME
FROM DVD d
WHERE EXISTS (
    SELECT 1
    FROM Catalogue c
    JOIN Store s ON c.STORE_CODE = s.STORE_CODE
    WHERE c.DVD_CODE = d.DVD_CODE
      AND s.LOCATION = 'Bogota'
      AND c.QUANTITY > 0 -- 加上这个确保库存数量大于0,更严谨
)
AND EXISTS (
    SELECT 1
    FROM Catalogue c
    JOIN Store s ON c.STORE_CODE = s.STORE_CODE
    WHERE c.DVD_CODE = d.DVD_CODE
      AND s.LOCATION = 'Buenos Aires'
      AND c.QUANTITY > 0
);

逻辑解释:

  • 第一个EXISTS检查当前DVD在Bogota门店有库存
  • 第二个EXISTS检查当前DVD在Buenos Aires门店有库存
  • 只有两个条件都满足时,该DVD才会被返回

用你的测试数据跑这两个查询,都会返回The Matrix(DVD_CODE=123),这正是你要的结果!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:01:29