我有下表:
+----+----------+-------------------+
| 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}
。
我该如何实现?
答案 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