MySQL执行对唯一列组合的检查

时间:2013-10-20 13:16:32

标签: php mysql

在MySQL表中有以下列:

id, spn(PK), cat1, cat2, cat3, act1, act2, act3 

(cat字段是VARCHAR类型,act字段是INT)我需要检查所有catΧ字段的唯一组合总数是否等于所有actX字段的唯一组合,如果不是,则返回找到的不匹配的spn值列表。

我最初的想法是执行concat(cat1,cat2,cat3) as A以及concat(act1,act2,act3) as B的选择并比较它们但我不太确定如何执行比较并返回找到的spn列表{} {1}}。欢迎任何想法。

我的应用程序是用PHP编写的,所以如果你可以建议使用PHP的解决方案,那很好。

注意:根据前2个答案,我想澄清一点,我想检查所有猫场的独特组合数是否等于组合的数量。行动领域。

Sample data

1 个答案:

答案 0 :(得分:0)

我不知道列类型,所以我会选择最标准的解决方案:

SELECT spn
FROM table
WHERE cat1 != act1 || cat2 != act2 || cat3 != act3

也许您的数据库设计可以改进。在列名中引入数字通常是错误设计的同义词。

编辑:假设订单在您的排列中不重要:

SELECT id
FROM files_imported
WHERE ((cat1 != cat2) + (cat1 != cat3) + (cat2 != cat3)) != ((act1 != act2) + (act1 != act3) + (act2 != act3))