2

レコード全体が一意である SQL データベースに挿入する方法はありますか? 主キーと一意の列を作成できることは知っていますが、それは私が望んでいることではありません。

データベースに過負荷をかけずにこれを行う最善の方法は何ですか? 「WHERE NOT EXISTS ()」を使用する一種のサブクエリを見てきました

正確に同じレコードが重複しないように、レコードを挿入する最も効率的な方法を知りたいだけです。

前もって感謝します!

4

4 に答える 4

0

あなたの質問は非常に明確で (他の人があなたが特に除外したいもので答えた理由がわかりません)、私が見つけるのに 1 時間以上費やしたもの...

このリンクは最も役に立ちました http://www.timrosenblatt.com/blog/2008/03/21/insert-where-not-exists/

mySQL 5.1.35 では ...

    mysql> CREATE TABLE testDupeSyntax  (name varchar(10), place varchar(20) );
Query OK, 0 rows affected (0.13 sec)

mysql>
mysql> INSERT INTO testDupeSyntax SELECT 'mango1', 'mango2' FROM DUAL WHERE NOT
EXISTS( SELECT name FROM testDupeSyntax WHERE name='mango1' LIMIT 1 );
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM testDupeSyntax;
+--------+--------+
| name   | place  |
+--------+--------+
| mango1 | mango2 |
+--------+--------+
1 row in set (0.00 sec)

mysql> INSERT INTO testDupeSyntax SELECT 'mango1', 'mango2' FROM DUAL WHERE NOT
EXISTS( SELECT name FROM testDupeSyntax WHERE name='mango1' LIMIT 1 );
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM testDupeSyntax;
+--------+--------+
| name   | place  |
+--------+--------+
| mango1 | mango2 |
+--------+--------+
1 row in set (0.00 sec)

mysql> INSERT INTO testDupeSyntax SELECT 'mango1', 'mango2' FROM DUAL WHERE NOT
EXISTS( SELECT name FROM testDupeSyntax WHERE name='mango1' AND place='mango2' LIMIT 1 );
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM testDupeSyntax;
+--------+--------+
| name   | place  |
+--------+--------+
| mango1 | mango2 |
+--------+--------+
1 row in set (0.00 sec)

mysql> INSERT INTO testDupeSyntax SELECT 'mango1', 'mango2' FROM DUAL WHERE NOT
EXISTS( SELECT name FROM testDupeSyntax WHERE name='mango1' AND place='mango3' LIMIT 1 );
Query OK, 1 row affected (0.05 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM testDupeSyntax;
+--------+--------+
| name   | place  |
+--------+--------+
| mango1 | mango2 |
| mango1 | mango2 |
+--------+--------+
2 rows in set (0.00 sec)

mysql>
于 2009-08-26T04:31:49.590 に答える
0

あなたがすることができます:

create table #temp (val1 varchar(30), val2 varchar(30))


declare @val1 varchar(30),@val2 varchar(30)
select @val1='josh',@val2='bob'

insert into #temp
select @val1, @val2
where not exists (select * from #temp where val1=@val1 and val2=@val2)

下半分を 2 回実行すると、レコードが複数回挿入されることはありません。

于 2009-04-01T23:58:38.753 に答える