【问题标题】:Not in Condition in the SQL在 SQL 中不符合条件
【发布时间】:2021-07-27 23:35:24
【问题描述】:
Productid Dept cd
123 440
123 422
123 248
1234 422
1234 440
1234 196
12 440
12 422
12 19
12 196
12345 196
12345 180
12345 422

** 我应该得到具有 422 和 440 但不应该有 248 的产品 ID。 答案应该是 1234 和 12

【问题讨论】:

  • 到目前为止您尝试过什么查询?
  • select productid from Table where productid in (select productid from table where productid in (SELECT prouctid from table where dept id in (422)) and dept id =440)) and dept id <.248>
  • Edit 你的问题并把你的尝试放在那里,@user2885425,不是 cmets。

标签: sql-server teradata


【解决方案1】:

有很多方法可以解决这个问题。

这是我认为最容易理解的一个选项(即可能不是最有效的!):

SELECT product_id
     , Sum(CASE WHEN dept_cd = 422 THEN 1 ELSE 0 END) AS has_422
     , Sum(CASE WHEN dept_cd = 440 THEN 1 ELSE 0 END) AS has_440
     , Sum(CASE WHEN dept_cd = 248 THEN 1 ELSE 0 END) AS has_248
FROM   your_table
WHERE  dept_cd IN (442, 440, 248)
GROUP
    BY product_id
;

过滤结果应该很简单(将其设为 CTE 或子查询,然后添加另一个 WHERE 子句,甚至只使用 HAVING 子句)。

【讨论】:

  • 产品 id 应该有 422 和 440 而不是 248
【解决方案2】:

gvee 使用聚合的答案可能是最有效的答案。简化版(可轻松扩展):

SELECT product_id
FROM   your_table
WHERE  dept_cd IN (442, 440, 248)
GROUP BY product_id
HAVING -- assuming (product_id,dept_id) is unique
   Sum(CASE WHEN dept_cd IN (422, 440) THEN 1  -- both exist -> result = 2
            WHEN dep_cd IN (248)       THEN -1 -- exists     -> result < 2
       END) = 2

【讨论】:

    猜你喜欢
    • 2013-10-07
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多