如何避免表中的重复检查多列

时间:2012-11-29 18:16:05

标签: sql sql-server tsql

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

让我们说。

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 

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

@kumar:请在单独的链how do i insert multiple values in mysql and avoid duplicates

中找到此问题的副本

答案 2 :(得分:0)

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

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

如果你想做这两件事,那么@jurgen和我的回答的组合应该涵盖你。

答案 3 :(得分:0)

如果在BusessCategory中重复bc.bc.CatgoryId,那么每次匹配的结果都会得到一行。

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

答案 4 :(得分: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
)

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

答案 5 :(得分:-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)