如何检查同一ID在不同行中是否具有不同的值?

时间:2019-09-12 10:07:22

标签: mysql sql

我有下表:

+----+----------+-------------------+
| ID | ID_CICLO | id_caratteristica |
+----+----------+-------------------+
| 1  | 72       | 2                 |
+----+----------+-------------------+
| 2  | 72       | 3                 |
+----+----------+-------------------+
| 3  | 73       | 2                 |
+----+----------+-------------------+
| 4  | 73       | 4                 |
+----+----------+-------------------+
| 9  | 3        | 2                 |
+----+----------+-------------------+
| 10 | 3        | 4                 |
+----+----------+-------------------+

我想提取所有id_caratteristica = 2并且等于4的ID。

这是我尝试过的方法,但这是错误的,因为And运算符仅适用于同一行。

SELECT * FROM caratteristiche_ciclo 
WHERE id_caratteristica = 2 
  and id_caratteristica = 4

结果应为ID_CICLO {3, 73}。 我该如何实现?

3 个答案:

答案 0 :(得分:1)

您可以使用基于条件聚合的过滤来解决此问题。首先,获取所有ID,其中id_caratteristica IN(2,4)

然后,您可以使用HAVING子句过滤出同时具有两个id_caratteristica值的ID:

SELECT id  
FROM caratteristiche_ciclo  
WHERE id_caratteristica IN (2,4) 
GROUP BY id 
HAVING COUNT(DISTINCT id_caratteristica) = 2

为了获得良好的性能,您可以定义以下覆盖索引(id, id_caratteristica)

答案 1 :(得分:0)

查询为:

SELECT ID, ID_CICLO FROM caratteristiche_ciclo WHERE id_caratteristica IN(2, 4);

如果您没有获得预期的结果,则您的数据肯定与您发布的样本不同。

答案 2 :(得分:0)

从预期结果来看,您似乎在寻找id_ciclo而不是id。

ii