2

我有一个 8 列的 MySQL 表,每列都是INT(1) default 0.

如何测试以查看 8 个字段中是否只有一个等于 1?

4

2 回答 2

2

尝试这个:

where 1 = (field1 = 1) + (field2 = 1) + ...

这是在 MySQL 中的每个条件都转换为1or的基础上工作的0。如果所有条件相加是1,那么这意味着只有一个是1(或true)。

于 2012-04-10T02:54:54.393 回答
0

这会起作用:

SELECT field1 + field2 + field3 + field4 + field5 + field6 + field7 + field8 = 1 
       AS ONLY_ONE

如果总和为 1,则返回1(TRUE),如果总和大于 1(多于一组)或小于 1(未设置),则返回 0(FALSE)。

如果您没有严格模式下的表/数据库(因此可以使用 0 和 1 以外的值),您可以执行以下操作:

SELECT (field1 > 0) + (field2 > 0) + (field3 > 0) ... = 1 AS ONLY_ONE

因为表达式将为真 (1) 并因此被添加为1是否为 1 或更大(设置)的值。

如果没有默认集,那么您可以进一步细化查询:

SELECT COALESCE(field1 > 0, 0) + COALESCE(field2 > 0, 0) + COALESCE(field3 > 0, 0) ... 
= 1 AS ONLY_ONE

所以覆盖你的基地的最好方法是:

SELECT 
COALESCE(field1 > 0, 0) + 
COALESCE(field2 > 0, 0) + 
COALESCE(field3 > 0, 0) +
COALESCE(field4 > 0, 0) +
COALESCE(field5 > 0, 0) +
COALESCE(field6 > 0, 0) +
COALESCE(field7 > 0, 0) +
COALESCE(field8 > 0, 0) +
= 1 AS ONLY_ONE
FROM my_table;
于 2012-04-10T03:40:29.817 回答