-3

我想确保不插入多列的组合。

可以说。

Emloyee

EmployeeId CatgoryId  BusinessId

1          1          1

2          2          1


BusessCategory

CategoryId BusinessId

1          1
1          2
1          3
2          1
2          4
2          3

我必须确保在向表中插入数据时不会重复任何组合。

我的 sql 查询会给我一些类似的东西

insert into employee(EmployeeId, CatgoryId,  BusinessId)
select e.employeeid,e.categoryid,bc.BusinessId from employee e inner join BusessCategory bc on bc.CatgoryId = e.CatgoryId 
4

6 回答 6

3

在所有相关列上定义唯一键。然后数据库将在插入重复项之前抛出错误。

于 2012-11-29T18:17:36.603 回答
0

如果 bc.bc.CatgoryId 在 BusessCategory 中重复,那么您将在每次匹配的结果中获得一行。

select e.employeeid,e.categoryid,bc.BusinessId 
from employee e 
inner join BusessCategory bc 
on bc.CatgoryId = e.CatgoryId

简单的答案是

select distinct e.employeeid,e.categoryid,bc.BusinessId 
from employee e 
inner join BusessCategory bc 
on bc.CatgoryId = e.CatgoryId
于 2012-11-29T19:08:38.447 回答
0

这就是我要找的:

insert into employee(EmployeeId, CatgoryId,  BusinessId)
select e.employeeid,e.CatgoryId,bc.BusinessId from employee e inner join BusessCategory bc 
on bc.CategoryId = e.CatgoryId 
where not exists(
select * from employee e1 where 
 bc.BusinessId = e1.BusinessId and e.CatgoryId = e1.CatgoryId and e.EmployeeId = e1.EmployeeId
)

欢迎任何更好的解决方案。

于 2012-11-29T20:55:38.310 回答
0

@kumar:请在单独的链中找到此问题的重复项我如何在 mysql 中插入多个值并避免重复项

于 2012-11-29T18:34:40.663 回答
0

我有点不清楚您是否是第一次尝试填充没有重复行的表,或者您是否想创建一个将来不允许重复行的表(或可能两者兼而有之)。如果您想防止重复行,那么@juergen 的答案应该涵盖您。如果您想第一次使用一组不同的行填充表,请尝试以下查询:

INSERT INTO Table1 (A,B,C)
SELECT DISTINCT A,B,C FROM TABLE2

如果您想同时做这两件事,那么@jurgen 和我的回答应该可以涵盖您。

于 2012-11-29T18:36:13.773 回答
-3

确切的语法可能不匹配,但以下这一个可能是一个基本想法——

           insert into table (A,B,C)  values (a,b,c) where a is not in(select a from table where A=a  and B=b and C=c)
于 2012-11-29T18:27:01.973 回答