在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的解决方案,那就很好。

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

Sample data

最佳答案

我不知道列类型,所以我将采用最标准的解决方案:

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

09-25 21:12