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