-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

関連するすべての列に対して一意のキーを定義します。次に、DB は重複を挿入する前にエラーをスローします。

于 2012-11-29T18:17:36.603 に答える
0

重複行なしで初めてテーブルにデータを入力しようとしているのか、それとも将来的に重複行を許可しないテーブルを作成したいのか (またはその両方) については、少しわかりません。行の重複を防ぎたい場合は、@juergenの回答でカバーできます。初めてテーブルに個別の行セットを設定する場合は、次のクエリを試してください。

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

両方のことをしたい場合は、@jurgenと私の答えの組み合わせがあなたをカバーするはずです。

于 2012-11-29T18:36:13.773 に答える
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 に答える
-3

正確な構文は一致しない可能性がありますが、次の 1 つが基本的な考え方である可能性があります---

           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 に答える