如何在查找表中查询唯一值?

时间:2013-04-08 05:25:12

标签: mysql sql unique-constraint

我的食谱表结构如下:

product2recipe
id | productid | recipeid

我想消除重复值的插入。基本上配方可以包含1个或更多产品。所以它看起来像这样:

1 | 1 | 1
2 | 2 | 1
3 | 1 | 2
4 | 5 | 3

如果配方包含类似的值,则用户可以提交新配方:

id | 1 | 4
id | 2 | 4

然后它不应该提交,因为该表已经有重复值,recipeid 1已经包含productid 1和2。如果是:

id | 1 | 5
id | 3 | 5

然后它应该提交,因为这是一个独特的组合。

如何以最佳方式查询我的表格?我担心它可能会使我的数据库服务器失速,因为它可能有很多组合。

2 个答案:

答案 0 :(得分:3)

您提供的示例确实告诉我们您想要什么,因为这些记录不存在于表格中。

但无论如何,这是一种对表格中的复合列强制执行UNIQUE约束的方法,

ALTER TABLE product2recipe ADD CONSTRAINT tb_uq UNIQUE(productid, recipeid)

在上面的demontration链接中取消注释ALTER TABLE语句,看看会发生什么

答案 1 :(得分:0)

鉴于一组已知的“新”食谱产品,我建议运行以下查询:

select recipeid
from product2recipe
group by recipeid
having count(distinct productid) = 
       count(distinct case when productid in (?,?,...) then productid end)

- 任何返回的食谱都将与“新”食谱具有相同的产品组合;然后应该对您的应用程序进行编程以拒绝此类“新”配方。