【问题标题】:SQL Condition with multiple value, return item has to have all of the value具有多个值的 SQL 条件,返回项必须具有所有值
【发布时间】:2019-05-10 20:43:23
【问题描述】:

我需要一个满足要求的sql查询条件。示例表

ID FieldA FieldB
1  A      Cat
2  A      Dog
3  A      Horse
4  B      Dog
5  B      Horse
6  B      Cat
8  C      Dog
9  C      Horse

所以我想获取包含在 FieldB Dog 中的 FieldA,使用 IN 条件的马应该返回

FieldA
A
B
C

但是如果我想要 Dog,Horse,Cat 它会返回

FieldA
A
B
`C` should not be return *explained below*

我希望条件排除没有“全部”条件项的项。 我试着环顾四周,我能得到的最接近的是

Select FieldA
From ATable
Where 1=1 And FieldB IN (Dog,Horse,Cat) //This is numeric value *explain below*
GROUP BY FieldA
HAVING COUNT(DISTINCT FieldB ) > 1

这是一个中间表,所以 Dog,Horse,Cat 实际上是其他表的数字 ID。我对其进行了调整,以便您更容易理解我的问题。

但这仍然会返回 FieldA C,这不是我想要的。但仅从 FieldA 返回 A,B,因为两者都包含“ALL”条件。 提前致谢。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    你可以试试下面-

    DEMO

    Select FieldA
    From ATable
    Where FieldB IN ('Dog','Horse','Cat') 
    GROUP BY FieldA
    HAVING COUNT(DISTINCT FieldB )=3
    

    输出:

    FieldA
    A
    B
    

    【讨论】:

    • 那么 3 表示我将要搜索的条件数?由于该表是一个简单版本,因此 IN() 可能会出现越来越多的条件。例如,如果我添加 IN(Dog,Horse,Cat,Pig) The Have = 4?
    • @SilvarCraw,是的
    • 这真的很有帮助,谢谢。我太专注于 IN() 部分,现在澄清了这部分。
    【解决方案2】:

    路漫漫其修远兮!

    Select FieldA, 
           group_concat(FieldB) as b
    From ATable
    Where FieldB IN ('Dog','Horse','Cat') 
    GROUP BY FieldA
    HAVING b like '%Dog%' and b like '%Horse%' and b like '%Cat%'
    

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 2022-08-17
      • 2013-05-07
      • 2018-09-20
      • 2015-03-07
      • 1970-01-01
      相关资源
      最近更新 更多