有没有办法对 MYSQL 中的 TINYINT(1) 列进行 AND 运算?

Is there a way to make an AND operation over a column of TINYINT(1) in MYSQL?

我得到以下 table 并且我需要 return 1 如果所有行都有 disponibilidad = 1

以下 QUERY 工作得很好,但我一直在寻找一种更有效的方法。

查询:

SELECT IF(AVG(disponibilidad) < 1, 0, 1) AS newResult
FROM pasteleria.compone
RIGHT JOIN pasteleria.ingredientes
    ON pasteleria.compone.id_ingrediente = pasteleria.ingredientes.id_ingrediente
WHERE id_componente = 1;

结果:

如我所见,使用 'AND' 效率会高得多,因为它不必执行 AVG()。

怎么样

SELECT IF(COUNT(*)>0,0,1) AS newResult
FROM pasteleria.compone
RIGHT JOIN pasteleria.ingredientes
    ON pasteleria.compone.id_ingrediente = pasteleria.ingredientes.id_ingrediente
WHERE id_componente = 1
AND disponibilidad <> 1

所以如果有任何行的disponibilidad是不是 1,你输出0,否则如果它是零(所以所有的disponibilidad值都是1)你输出1?

MySql 不支持像 Postgresql 的 bool_and 这样的布尔 AND 聚合函数。

为什么不简单 MIN():

SELECT MIN(disponibilidad) AS newResult
FROM pasteleria.compone
RIGHT JOIN pasteleria.ingredientes
    ON pasteleria.compone.id_ingrediente = pasteleria.ingredientes.id_ingrediente
WHERE id_componente = 1;

只有当该列的所有值都为 1(前提是该列不可为空)时,才会 return 1,如果至少有一行为 0,则为 0。