Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何检查同一ID在不同行中的值是否不同?_Mysql_Sql - Fatal编程技术网

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
where
ID\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是的,我说的是这一点,它只是为了确保重复项不会被计算在内。