也许你可以通过一个关系添加另一个列或另一个表,该关系将包含那些包含1值的字段的计数。显然,必须有一些INSERT / UPDATE逻辑,它可以在对现有表的每次更新时执行此操作,也可以在事务中执行:BEGIN UPDATE ...; SELECT FROM表WHERE id = 1和fields_containing_one> 2; COMMIT(以确保隔离任何赛车更新或在您的UPDATE逻辑和您想要的查询之间插入。
我默认假设你的fieldN值可以是0和1以外的数字,并且你只查找精确== 1的那些。如果你知道fieldN值只有0或1那么你可以可能只使用所有fieldN值的SUM。
总的来说,听起来您的表/架构是非规范化的,并且在您继续使用此数据库时可能会导致其他问题。您可以通过使用两列(field_num或attribute_name以及相应的值)来规范化架构,而不是将field1,field2,...用于数据集的每一行。然后代替给定实体的N个字段的一行,每个实体有N行...每个(KEY)+(fieldN,value)元组一个。
在该模式下,您可以添加约束UNIQUE(无论您的现有密钥是+ field_name)(以确保每个实体的每个类型的“field_name”行不超过一个)。
如果那是您的架构,那么您可以执行以下操作:SELECT id FROM(SELECT table WHERE id = 1 AND value = 1)WHERE COUNT(id)> 1(换句话说,在查询中使用子SELECT子句。