两列的唯一值

时间:2019-09-26 01:17:21

标签: mysql constraints unique

MySQL中是否有任何约束,以避免在同一列或另一列中输入相同的值? 例如,在下表中:

   --------------------
   |       TABLE       |
   ---------------------
   | NUMBER1 | NUMBER2 |
   ---------------------
   |    3    |   4     |
   |    7    |   9     |
   ---------------------

我需要防止在第NUMBER1或NUMBER2列中输入任何数字3,因为该值已经存在于NUMBER1列中;并且数字9不能在NUMBER1或NUMBER2列中提取,因为该值已经存在于NUMBER2列中。

换句话说,我需要这两列中的每一列中的每个值都是唯一的。

谢谢。

1 个答案:

答案 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;