1

在 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 的列表 where A <> B。欢迎任何想法。

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

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

样本数据

4

1 回答 1

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))
于 2013-10-20T13:32:08.967 回答