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


MySQL perform check on unique column combinations

在MySQL表中有以下列:

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

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

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

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

注意:根据前 2 个答案,我想澄清一下,我正在尝试检查所有 cat 字段的唯一组合数是否等于 act 字段组合的数量。

示例数据

我不知道

列类型,所以我将使用最标准的解决方案:

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))