2012-11-29 4 views
-2

여러 열의 조합이 삽입되지 않도록하고 싶습니다.테이블에서 중복을 피하는 방법 여러 열을 확인하십시오

이렇게 말합니다.

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 
+0

위의 데이터에서 반복되는 내용의 예를 들려 줄 수 있습니까? –

+0

은 이미 1 2 3 3 조합이 있다고 말하므로 동일한 조합으로 삽입하는 것을 허용해서는 안됩니다. – Brainchild

+0

귀하의 질문은 무엇입니까? 'UNIQUE' 또는'PRIMARY KEY' 제약 조건은 중복을 방지하고, 당신은 이미 그것을 가지고 있다고 언급 했으므로 문제가 무엇인지 명확하지 않습니다. – Pondlife

답변

2

같은 모든 관련 컬럼을 통해 고유 키를 정의합니다. 그런 다음 DB는 중복을 삽입하기 전에 오류를 발생시킵니다.

+0

고유 키가 정의되어 있으므로 조합이없는 경우에만 삽입하고 싶습니다. – Brainchild

+0

그런 다음 삽입하거나 오류를 잡거나 삽입하기 전에 선택하십시오. 또는 MSSQL'MERGE '를보십시오 –

-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) 
+0

구문이 유효하지 않고 코드의 의도가 명확하지 않기 때문에 유용한 답변이 아닙니다. – Pondlife

0

내가 '별도의 체인이 질문의 중복을 발견하십시오 중복 된 행없이 처음으로 테이블을 채우려는 경우 또는 앞으로 중복 행을 허용하지 않는 테이블을 작성하려는 경우 (또는 둘 다 가능할지 여부)에 대해서는 약간 분명하지 않습니다. 중복 행이 앞으로 나오지 않도록하려면 @ juergen의 대답이 당신을 커버해야합니다. 당신이 다음 @jurgen의 조합을 모두 일을하려면

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

내 대답은 당신을 포함해야한다 : 당신이 행의 고유 한 세트를 처음으로 테이블을 채우는하려면 쿼리 아래보십시오.

0

bc.bc.CatgoryId가 BusessCategory에서 반복되는 경우 각 일치에 대해 결과에서 한 행을 가져옵니다. 더 나은 솔루션

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 
) 

오신 것을 환영합니다 :

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 
+0

여러 번 실행하면 쿼리가 작동합니다. – Brainchild

+0

데이터가 변경되지 않으면 쿼리를 실행할 때마다 쿼리가 동일한 데이터를 반환해야합니다. 테스트 해 봤니? – Paparazzi

+0

위의 쿼리는 별개의 레코드를 반환하지만 사용자가 중복 된 조합을 다시 제출하지 못하도록 제한하지 않습니다 – Brainchild

관련 문제