MySQL中是否有任何约束,以避免在同一列或另一列中输入相同的值? 例如,在下表中:
--------------------
| TABLE |
---------------------
| NUMBER1 | NUMBER2 |
---------------------
| 3 | 4 |
| 7 | 9 |
---------------------
我需要防止在第NUMBER1或NUMBER2列中输入任何数字3,因为该值已经存在于NUMBER1列中;并且数字9不能在NUMBER1或NUMBER2列中提取,因为该值已经存在于NUMBER2列中。
换句话说,我需要这两列中的每一列中的每个值都是唯一的。
谢谢。
答案 0 :(得分:0)
这是一个间接解决方案。您可以重构表的设计,使其对于当前两个列仅使用一个列。然后,引入某种组列以跟踪给定记录中数字之间的关系。那就是:
grp | pos | NUMBER
1 | 1 | 3
1 | 2 | 4
2 | 1 | 7
2 | 2 | 9
现在,您只需要在单个NUMBER
列上使用唯一约束。请注意,如果您想按现在显示的方式查看数据,则可以使用简单的数据透视查询进行处理:
SELECT
grp,
MAX(CASE WHEN pos = 1 THEN NUMBER END) AS NUMBER1,
MAX(CASE WHEN pos = 2 THEN NUMBER END) AS NUMBER2
FROM newTable
GROUP BY
grp;