多对多连接表,双向关系和数据完整性

时间:2014-06-24 09:56:34

标签: mysql relational-database

我有一张旧的遗产表:

 =====================
| product1 | product2 |
 =====================
|        1 |        2 |
|        2 |        1 |
|        3 |        4 |
|        4 |        5 |
|        5 |        3 |
 =====================

这是一张设计糟糕的桌子,我知道,但它必须留下来。该表的目的是存储产品之间的关系。规则是每个产品应该引用每个相似的产品,反之亦然。假设示例数据是完整数据集,前两行是正确的 - 1与2的关系,2与1的关系。但是,最后三行是混乱。表示这些产品关系的正确方法是:

 =====================
| product1 | product2 |
 =====================
|        3 |        4 |
|        3 |        5 |
|        4 |        3 |
|        4 |        5 |
|        5 |        3 |
|        5 |        4 |
 =====================

我需要的是某种算法(或工具),以便识别和修复不正确的数据。

1 个答案:

答案 0 :(得分:2)

这是一个相对简单的SQL查询。

SELECT product1,product2 ... 它的镜像行不存在。

后一个条款就像

不存在(   SELECT * FROM tbl AS MIRROR    在哪里MIRROR.product1 = outertbl.product2      AND MIRROR.product2 = outertbl.product1 )

如果MySQL支持EXCEPT,那么这是编写查询的另一种方式。