【问题标题】:And multiple values like IN clause以及像 IN 子句这样的多个值
【发布时间】:2012-07-30 14:07:18
【问题描述】:

如何获得下表中同时具有 Feature1 和 Feature2 的汽车和功能(BMW 和 Toyota)?

Select Car,Feature 
    from Table 
    where Feature in ('Feature1','Feature2') 

提供所有 3 辆车,包括只有 Feature1 的本田。这只是实际查询的一个简化示例,在 IN 子句中可以有数百个值。

Car    Feature
-----  --------
BMW    Feature1
BMW    Feature2
BMW    Feature3
Toyota Feature1
Toyota Feature2
Honda  Feature1

谢谢, 基兰

【问题讨论】:

标签: sql in-clause


【解决方案1】:
select Car
from your_table
where feature in ('f1', 'f2')
group by car
having count(distinct feature) >= 2

【讨论】:

  • 如果汽车的功能“f1”在表中列出了两次(可能不太可能,但仍可能是个问题),它会作为您查询的结果出现。这就是为什么总是对这类查询使用 DISTINCT 计数。
  • 你是对的。我添加了它以使其在每种情况下都能正常工作。谢谢。
【解决方案2】:

使用 GROUP/HAVING 构造,其中 HAVING 测试 IN 子句中的元素数量。这样您就可以保证这两个功能都存在。

SELECT cf.Car
    FROM CarFeature cf
    WHERE cf.Feature IN ('Feature1', 'Feature2')
    GROUP BY cf.Car
    HAVING COUNT(DISTINCT cf.Feature) = 2;

【讨论】:

  • Joe,我可以在结果中同时获得汽车和功能吗?
  • @Kiranshell:您在 IN 子句中测试这些功能时,您不知道这些功能吗?
  • Joe, The Car and Feature 是我的要求的简化,例如,实际查询在 IN 子句中有数百个值。我必须在将此结果导出到电子表格后将其发送给用户,因此我还需要结果中的功能。
【解决方案3】:

IN 子句实际上是嵌套的OR。以下将为您提供具有这两种功能的所有汽车。

SELECT U.Car FROM
  (
   Select Car from Table where Feature ='Feature1'
   UNION ALL
   Select Car from Table where Feature ='Feature2'
  ) AS U
WHERE COUNT(U.Car) > 1

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 2020-02-26
    • 2023-03-12
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多