Mysql 如何检查同一ID在不同行中的值是否不同?
我有下表:Mysql 如何检查同一ID在不同行中的值是否不同?,mysql,sql,Mysql,Sql,我有下表: +----+----------+-------------------+ | ID | ID_CICLO | id_caratteristica | +----+----------+-------------------+ | 1 | 72 | 2 | +----+----------+-------------------+ | 2 | 72 | 3 | +----+----------
+----+----------+-------------------+
| 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
这是我尝试过的,但它是错误的,因为和操作符只在同一行上工作
SELECT * FROM caratteristiche_ciclo
WHERE id_caratteristica = 2
and id_caratteristica = 4
结果应该是ID_CICLO{3,73}
。
我如何才能做到这一点?问题是:
SELECT ID, ID_CICLO FROM caratteristiche_ciclo WHERE id_caratteristica IN(2, 4);
如果您没有得到预期的结果,那么您的数据肯定与您发布的示例不同。您可以使用基于条件聚合的筛选来解决此问题。首先,在(2,4)
中获取所有ID
whereID\u-caratterterica
然后,您可以使用HAVING
子句筛选出同时具有ID\u caratteristica
值的ID:
SELECT id
FROM caratteristiche_ciclo
WHERE id_caratteristica IN (2,4)
GROUP BY id
HAVING COUNT(DISTINCT id_caratteristica) = 2
为了获得良好的性能,您可以定义以下覆盖索引:(id,id\u caratterica)
从您的预期结果来看,您似乎在寻找id\u ciclo,而不是id
SELECT id_ciclo
FROM caratteristiche_ciclo
WHERE id_caratteristica IN (2,4)
GROUP BY id_ciclo
HAVING AVG(id_caratteristica) = 3
请以文本而不是图像的形式发布代码。您是否尝试过使用或代替and?@LelioFaieta我尝试过使用或,但这不是我想要的结果。或返回每一个ID_CICLO,该ID_CICLO包含一行2或4。我只想要ID_CICLO,其中一行为2,一行为4。使用或,您提供的示例数据将返回您想要的结果(而不使用和)。因此,请解释或的错误,并提供一些更自我解释的示例数据(对于DISTINCT
;)来说,这是一个很好的捕获)@萨米DISTINCT
可能是不必要的,只会减慢查询速度。只有在表中确实有重复项时才需要它。@GordonLinoff是的,我说的是这一点,它只是为了确保重复项不会被计算在内。