Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何查询查找表中的唯一值?_Mysql_Sql_Unique Constraint - Fatal编程技术网

Mysql 如何查询查找表中的唯一值?

Mysql 如何查询查找表中的唯一值?,mysql,sql,unique-constraint,Mysql,Sql,Unique Constraint,我有一个配方表,其结构如下: product2recipe id | productid | recipeid 1 | 1 | 1 2 | 2 | 1 3 | 1 | 2 4 | 5 | 3 我想消除重复值的插入。基本上,一个配方可以包含一个或多个productid。看起来是这样的: product2recipe id | productid | recipeid 1 | 1 | 1 2 | 2 | 1 3 | 1 | 2 4 | 5 | 3 如果配方包含类似值,则用户可以提交新配方,如

我有一个配方表,其结构如下:

product2recipe
id | productid | recipeid
1 | 1 | 1
2 | 2 | 1
3 | 1 | 2
4 | 5 | 3
我想消除重复值的插入。基本上,一个配方可以包含一个或多个productid。看起来是这样的:

product2recipe
id | productid | recipeid
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
然后它应该提交,因为这是一个独特的组合


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

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

但无论如何,这里有一种方法可以对表中的复合列强制执行
唯一的
约束

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

取消对上述DeMontation链接中的
ALTER TABLE
语句的注释,并查看会发生什么情况

给定一组已知的“新”配方产品,我建议运行以下查询:

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

-任何返回的配方将具有与“新”配方相同的产品集;然后,您的应用程序应该被编程为拒绝这些“新”配方。

这正是您想要的吗
:)
不用担心
:D
如果这不起作用,请告诉我,以便我可以更新它
:)
让我们在这里讨论,多行是什么意思?Unique语句只适用于两种组合。示例[productid,recipeid][1,1]和[1,1]不起作用。然而,我的问题是不允许用户提交[1,2],因为productid[1,1]已经存在,所以它只会创建另一个具有类似IngRedient的配方。我相信@SamuelMRSN不需要基于行的唯一约束,而是基于配方的唯一约束。配方1是产品[1,2],因此,不能添加仅为[1,2]的新配方。您是否正在寻找一个要写入的查询,该查询将返回所有重复配方(或只是重复配方的计数),或者是否需要一个阻止插入重复配方的DB约束?(我不确定后者是否可行。)顺便问一下,这实际上是一个配方数据库,还是“配方”只是一个类似类型数据组织的示例?icic,对大量或多个配方运行此查询会很慢吗?我的意思是,这是强化我的结构的最佳方式吗?@samuelmrrsn:“巨大”有多大?这可能取决于许多因素,如行数、数据库服务器内存、磁盘速度等-最好的检查方法是对具有实际条目数的测试数据库运行测试查询,因为随着条目数的增加,这可能会执行得更慢。ic。。嗯,我等一下,下次再弄清楚,因为这只是我们国家的一个地方网站,所以我认为它不会吸引很多访问者。所以我认为这会很好。非常感谢。