複数の行を選択して別のテーブルに挿入しています。私はそれがまだ複数の行を挿入しているテーブルに存在しないことを確認したい。 DISTINCTは、選択項目に重複する行がある場合には、挿入する表の既存のデータと比較するときには機能しません。sql重複なしでselectからテーブルに挿入する(DISTINCT以上必要)
一度に1つの行を選択した場合は、IF EXISTがありますが、その複数の行(10個以上の場合もある)から、私はそうすることはできません。
複数の行を選択して別のテーブルに挿入しています。私はそれがまだ複数の行を挿入しているテーブルに存在しないことを確認したい。 DISTINCTは、選択項目に重複する行がある場合には、挿入する表の既存のデータと比較するときには機能しません。sql重複なしでselectからテーブルに挿入する(DISTINCT以上必要)
一度に1つの行を選択した場合は、IF EXISTがありますが、その複数の行(10個以上の場合もある)から、私はそうすることはできません。
はそこにこのことについていくつかのMSDNの記事がありますが、ここまでで、この1は最高です:
http://msdn.microsoft.com/en-us/library/ms162773.aspx
は、彼らはそれが本当の簡単実装し、私の問題が修正されました。また、GUIは醜いですが、Windows 2003でコマンドラインを使用せずに分間隔を実際に設定することができます。
ターゲットテーブルにまだ存在しないソーステーブルからすべてのユニークな行を検索しようとしていますか?
そうでない場合、あなたは一意のために各列をチェックする必要があります...あなたは上の一意性をベースにすることができ、主キーを持っていると仮定していますSELECT DISTINCT(*) FROM source
WHERE primaryKey NOT IN (SELECT primaryKey FROM target)
。
明確な特定の列のみ(例えばCOL1、COL2)にする必要がありますが、あなたはすべての列を挿入する必要があり、あなたはおそらく、いくつかの派生テーブルが必要になります場合は
insert into <target_table> select col1 etc
from <source_table>
where <target_table>.keycol not in
(select source_table.keycol from source_table)
INSERT INTO target_table (col1, col2, col3)
SELECT DISTINCT st.col1, st.col2, st.col3
FROM source_table st
WHERE NOT EXISTS (SELECT 1
FROM target_table t2
WHERE t2.col1 = st.col1
AND t2.col2 = st.col2
AND t2.col3 = st.col3)
を働くかもしれない何のための擬似コード(ANSI SQLの場合):
INSERT INTO target_table (col1, col2, col3)
SELECT st.col1, st.col2, st.col3
FROM (
SELECT col1,
col2,
col3,
row_number() over (partition by col1, col2 order by col1, col2) as rn
FROM source_table
) st
WHERE st.rn = 1
AND NOT EXISTS (SELECT 1
FROM target_table t2
WHERE t2.col1 = st.col1
AND t2.col2 = st.col2)
おそらく最高の回答になる – vol7ron
すでにどんなフィールドに一意のインデックスを持っている場合は、宛先テーブルに一意である必要がある、あなただけINSERT IGNOREを使用することができます(ここでofficial documentationです - 関連するビットは最後に向かっています)、そしてMySQLがあなたのために複製を捨てるようにします。
希望すると便利です。
MySQLで「INSERT ... SELECT DISTINCT」を実行しようとしたときに「Unknown column 'DISTINCT in'フィールドリスト'"。しかし、INSERT IGNOREは成功しました。もしINSERT ... SELECT DISTINCTよりかなり遅いのであれば成功しました。 – Mikkel
使用するクエリを指定します。データベースも役立ちます。 –
あなたのDBMSが解決策である可能性のあるMERGE文をサポートしている場合 –