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

如何先获取ITEM_PRICE表中仅出现一次的ITEM_ID再筛选价格等于10的记录

解决方法:先筛选唯一出现的ITEM_ID,再过滤价格

我明白你的需求啦——你要的是在整个ITEM_PRICE表里只出现一次,并且价格等于10的ITEM_ID,而不是价格为10的记录里的去重ID。你的原语句逻辑顺序搞反了,咱们调整一下SQL的执行逻辑:

方法1:使用子查询+IN

SELECT item_id
FROM item_price
WHERE price = 10
AND item_id IN (
    -- 先找出整个表中仅出现一次的ITEM_ID
    SELECT item_id
    FROM item_price
    GROUP BY item_id
    HAVING COUNT(*) = 1
);

方法2:使用JOIN关联子查询

SELECT ip.item_id
FROM item_price ip
-- 关联仅出现一次的ITEM_ID集合
JOIN (
    SELECT item_id
    FROM item_price
    GROUP BY item_id
    HAVING COUNT(*) = 1
) unique_items ON ip.item_id = unique_items.item_id
WHERE ip.price = 10;

逻辑解释

  1. 子查询部分:GROUP BY item_id会把相同的ITEM_ID分组,HAVING COUNT(*) = 1只保留那些分组后只有1条记录的ITEM_ID,也就是整个表中仅出现一次的ID。
  2. 外层查询:要么用IN把这些唯一ID筛选出来,再加上price = 10的条件;要么用JOIN关联后过滤价格,最终得到的就是既只出现一次,价格又为10的ITEM_ID。

对比原语句的问题

你原来的SELECT distinct item_id from item_price where price = 10是先筛选价格为10的记录,再对这些记录里的ITEM_ID去重。但这些ID可能在表的其他非价格10的记录里还存在,所以完全不符合你“仅在数据库中存在一次”的核心要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:14:12