重複キーの調査についてのSQL文がわかりません
- Bテーブルに移行した際に重複キーが発生したため、重複レコードを調査したい。
- AテーブルからBテーブルへのデータ移行時に、重複キー違反エラーが発生しています。
- 重複レコードを抽出するためのSQL文を教えてください。
- ベストアンサー
Insertで重複となったキーをさがすSQL文
テーブルの移行(Aテーブルのデータをキーを変更してBテーブルにInsertする)を行ったところ、 ERROR: duplicate key violates unique constraint "Bテーブル_unique"とメッセージが出ます。 SQL文はつぎの通りです。 INSERT INTO Bテーブル(契約番号, ユニット番号, 資源番号, 入力日, 数量) SELECT a.契約番号, a.ユニット番号, a.資源番号, a.入力日, a.数量 FROM Aテーブル a ; Bテーブルのキーは、契約番号, ユニット番号, 資源番号, 入力日です。 Aテーブルのキーは、契約番号,入力日,レベル1,レベル2です。 データ件数は約3万件です。 Bテーブルを調査して、重複となるレコードを表示させたいのですが、 SQL文がわかりません。 よろしくご教授ください。
- Horirin39
- お礼率81% (125/154)
- PostgreSQL
- 回答数1
- ありがとう数3
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>Bテーブルを調査して、重複となるレコードを ターゲットが違うでしょ。Bには重複レコードは できないんだから・・・ AテーブルからBテーブルのキーとなる項目で グループ化し、そのレコード数が2以上ならば 重複になる。 SELECT 契約番号,ユニット番号,資源番号, 入力日,COUNT(契約番号) AS 件数 FROM Aテーブル GROUP BY 契約番号, ユニット番号,資源番号,入力日 HAVING COUNT(契約番号)>1
関連するQ&A
- Insert文で・・・
失礼します。SQL初心者なので質問します。 Insert into Aテーブル Select X , Y , Z From Bテーブル というSQLがあり、Aテーブルの列数を3から4にした際、AテーブルへのInsertの項目を、BテーブルからSelectされたX,Y,Z以外に普通の変数αも新たに作成した4つめの項目として同時にInsertしたい場合、どのようなSQLにすれば良いでしょうか? Insert into Aテーブル (Select X , Y , Z From Bテーブル),α みたいに都合良くはいきませんよね??
- ベストアンサー
- Oracle
- uniqueキーをupdateで+1するとERROR 1062: Duplicate entry になる
create table table1 ( a tinyint unsigned not null, b tinyint unsigned not null, unique index_table1 ( a, b ) ); insert into table1 values('1','1'); insert into table1 values('1','2'); update table1 set b = b+1 where a = '1'; とすると、 ERROR 1062: Duplicate entry '1-2' for key 1 とエラーになってしまいます。 どうやら unique の制約に引っかかっているみたいです。 結果としては 1,2 1,3 になればいいのですが、一個一個bが多い順番にSQLを発行するか、unique 制約を外すしかないんでしょうか? (面倒なので、一発でやりたいのです)
- ベストアンサー
- MySQL
- Insert Into Select での重複について
DB:SQLServer2000 こんにちは お世話になっております。 トランザクションのテーブルA から ワークのテーブルBへInsert Into Select を使用してデータを格納しているのですが、その際に重複が発生してしまいます。 テーブルA 主キーあり テーブルB 主キーなし Delete B Insert into B select 項目1,項目2,・・・ from A With(Nolock) where 日付項目 = 20080101 テーブルAの主キー項目は全てテーブルBへInsertしており、Insert完了後のテーブルBの中身を見ると、まれに全く同じデータが2件出来ていることがあります。 このInsert into selectが実行されている間に、テーブルAに対して登録更新が行われることもあります。 色々と試してはいるのですが、原因が特定できずに困っております。 もし何かお気づきになられる方がいらっしゃいましたら、ご教示下さい。 よろしくお願い致します。
- 締切済み
- SQL Server
- SQLを教えてください。
以下に5つのテーブルがあるとします。 (1)全体テーブル ・登録順番号(Key) ・登録名 (2)商品テーブル ・項目コード(Key) ・品名コード(Key) ・商品登録順番号(Key) ・商品サイズ(Key) ・品名 (3)商品単価テーブル ・項目コード(Key) ・品名コード(Key) ・商品登録順番号(Key) ・商品サイズ(Key) ・登録順番号(Key) ・商品単価 (4)新_商品単価テーブル ・項目コード(Key) ・品名コード(Key(Key)) ・商品登録順番号 ・商品サイズ(Key) ・登録順番号(Key) ・新_商品単価 (5)詳細テーブル ・登録順番号(Key) ・品名コード(Key) ・原価項目コード(Key) ・商品数量A ・商品数量B 上記のテーブルから、以下の条件に合致する「(1)の登録名」「(2)の品名」「(4)の新_商品単価×(5)の商品数量※」を取得したい。 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A 【条件1】全てAND条件 新_商品単価テーブルの項目コードが100 新_商品単価テーブルの品名コードが50 新_商品単価テーブルの新_商品単価×詳細テーブルの商品数量※<0 商品単価テーブルの商品単価×詳細テーブルの商品数量※>0 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A 上記で抽出出来るレコードに加えて、以下 【条件2】全てAND条件 新_商品単価テーブルの項目コードが200~300あるいは400~500 新_商品単価テーブルの新_商品単価×詳細テーブルの商品数量※=0 商品単価テーブルの商品単価×詳細テーブルの商品数量※>0 ※商品数量Bに値があれば商品数量Bを、値がなければ商品数量A どのようなSQLで抽出できますでしょうか?? DBはAccessです。
- 締切済み
- SQL Server
- Insert Intoでアップデートをかけたい
テーブルから他テーブルへデータの更新をしたいと思っています。 テーブルは下記のような構成になっています。 テーブルSTOCK(主キーは商品コード) 商品コード(varchar),数量(int) A001,5 B002,10 C003,30 テーブルTOTAL(主キーは商品コード) A001,10 B002,20 やりたいことは、テーブルTOTALを更新させる事です。テーブルSTOCKの商品コードがテーブルTOTALにあれば、減算をおこないたいです。 そこで下記のSQLを書きました。 INSERT INTO テーブルTOTAL SELECT * FROM テーブルSTOCK ON DUPLICATE KEY UPDATE テーブルTOTAL.数量 = テーブルTOTAL.数量 - テーブルSTOCK.数量 更新結果 A001,5 B002,10 C003,30 商品コードがA001、B002は欲しい結果がでました。欲しい結果はC003が「-30」になることです。 テーブルTOTALにはC003の商品コードがないため、30でアップデートされてしまうのですが、なんとか「-30」で更新できるようにできないでしょうか? よろしくお願いいたします。
- ベストアンサー
- MySQL
- 入力値と外部キーをINSERTするには
追加したいカラムが3つあるとしまして、そのうち2つはフォームからの入力値で、残り1つは別テーブルのIDをWHEREで引っ張ってきてINSERTしたい場合、INSERT...VALUES()とINSERT...SELECT構文を組み合わせないとダメかと思うのですが、組み合わせるとうまくいきません。2つの文に分けるしかないのでしょうか? やりたいことは下の感じのSQLです。が、解釈してくれません。 INSERT INTO room(A, B, C) VALUES (1, 2, SELECT other_table.id FROM other_table WHERE other_table.id = 1");
- ベストアンサー
- MySQL
- 場合によって条件を変えるSQL
ORACLE環境下、SQLにて以下のような条件でデータを取得したいです。 AテーブルとBテーブルを結合して、Bテーブルから名称を取得する。 <Aテーブル> id (key) 番号1 番号2 A01 001 n0001 A02 null n0002 <Bテーブル> code(key) 名前 番号1 番号2 c0001 太郎 001 n0001 c0002 次郎 002 n0002 (1)A.番号が入力されていれば A.番号1=B.番号1 AND A.番号2=B.番号2を条件にする (2)A.番号が入力されていなければ A.番号=B.番号を条件からはずす。 A.番号2=B.番号2 のみで検索する。 <欲しい結果> A01→太郎を取得 A02→次郎を取得 入力されていたら条件に加え、入力されていなかったら 条件から外す、というSQLを教えていただけないでしょうか。 よろしくお願いいたします。
- 締切済み
- Oracle
- SQL文にて
調べたり聞いたりしたのですが なかなか解らなかったので、質問させてください。 AテーブルとBテーブルとがあり、Aテーブルのみにしか 存在しないデータを一発で取得することはできるのでしょうか? Aテーブルのデータ数(100件) Bテーブルのデータ数(80件) Aのキー項目とBのキー項目とは同一です。 処理をしたい事はAとBとでAにしか存在しないデータを ループせずに一回のSQLで行えたらと思っています。
- 締切済み
- SQL Server
- 1つのSQL文で検索し、その結果をINSERTしたい
いつもお世話になっております。 今回、AテーブルとBテーブルを調べてデータに差分があれば、その差分データを元にCテーブルからデータを取ってきて、取ってきたデータをDテーブルに追加する、というSQLを1文で書くようにと言われました。 Cテーブルからデータを取ってくるところまではできたのですが、それをDテーブルにINSERTするにはどうしたら良いのかがわかりません。 Cテーブルから取得するデータは5件です。 DテーブルにはCテーブルから取得したデータ以外にも3件入力する項目があります。 現状を簡単に表現すると INSERT INTO Dテーブル(ア,イ,ウ,エ,オ,カ,キ,ク) VALUES((SELECT あ,い,う,え,お FROM Cテーブル),か,き,く); のようにやってみたのですが、うまくいきません。 こういう場合の記述方法をご存知の方がいらっしゃいましたら、教えてください。 よろしくお願いいたします。
- 締切済み
- Oracle
- 重複を許すキーの構文がわかりません。
データベース自体はPostgreSQLを使っています。そして、アクセス2003を使って、テーブルリンクで閲覧しています。 あるフィールドに検索が早くなるようにキーを設けたいのですが、 重複を許すキーの構文がわかりません。 PRIMARY KEY, UNIQUEの設定はわかるのですが、 どのように記述すればよいのでしょうか? 以下、アクセスのプロパティです。 インデックス ●いいえ デフォルト、無指定 ●はい(重複あり)[***** ここの部分のSQLが知りたい *****] ALTER TABLE テーブル名 ADD ???????? (フィールド); ●はい(重複なし)UNIQUE もしくは値要求混みのPRIMARY KEY ALTER TABLE テーブル名 ADD UNIQUE (フィールド); ALTER TABLE テーブル名 ADD PRIMARY KEY (フィールド);
- ベストアンサー
- PostgreSQL
お礼
さっそくのご回答ありがとうございます。 試してみます。