2017.
04.
22
12:47:23
結論から書くと、こんなSQL文でOKでしたφ(--)
それでは詳細……と言うほどでもないですが詳細を書いていきます。
2つのテーブルを比較して、テーブルAにはあるけどテーブルBにはないレコードを
テーブルBにInsertしたかったのです。
頑張ればSQL文一発でいけるよね(--?というのが今回のきっかけです。
教えて!Googleせんせー!
ふむふむ(--)
こんなSQL文でいけましたφ(--)
まず
の部分は「baseTable(tbl1)とtargetTable(tbl2)にあるデータ」の条件指定です。
この条件に一致するデータが
なのです。
よって
は
1.「baseTable(tbl1)とtargetTable(tbl2)にあるデータ」以外のデータを
2.baseTable(tbl1)から抽出する
言い換えると
1.baseTable(tbl1)にあるけどtargetTable(tbl2)にないデータを
2.baseTable(tbl1)から抽出する
指定になります。
これで、baseTable(tbl1)にあるけどtargetTable(tbl2)にないデータが抽出できました。
あとは、この抽出結果をtargetTable(tbl2)に突っ込めば完了です。
ということで
を実行すれば、baseTable(tbl1)にあるけどtargetTable(tbl2)にないデータが
targetTable(tbl2)に突っ込まれます。
そんな感じ\(--)/
INSERT INTO targetTable (key, column1)
SELECT tbl1.key, tbl1.column1 FROM baseTable tbl1
WHERE NOT EXISTS(
SELECT 'a'
FROM targetTable tbl2
WHERE tbl2.key = tbl1.key
)
SELECT tbl1.key, tbl1.column1 FROM baseTable tbl1
WHERE NOT EXISTS(
SELECT 'a'
FROM targetTable tbl2
WHERE tbl2.key = tbl1.key
)
それでは詳細……と言うほどでもないですが詳細を書いていきます。
2つのテーブルを比較して、テーブルAにはあるけどテーブルBにはないレコードを
テーブルBにInsertしたかったのです。
頑張ればSQL文一発でいけるよね(--?というのが今回のきっかけです。
教えて!Googleせんせー!
ふむふむ(--)
こんなSQL文でいけましたφ(--)
INSERT INTO targetTable (key, column1)
SELECT tbl1.key, tbl1.column1 FROM baseTable tbl1
WHERE NOT EXISTS(
SELECT 'a'
FROM targetTable tbl2
WHERE tbl2.key = tbl1.key
)
SELECT tbl1.key, tbl1.column1 FROM baseTable tbl1
WHERE NOT EXISTS(
SELECT 'a'
FROM targetTable tbl2
WHERE tbl2.key = tbl1.key
)
まず
SELECT 'a'
FROM targetTable tbl2
WHERE tbl2.key = tbl1.key
FROM targetTable tbl2
WHERE tbl2.key = tbl1.key
の部分は「baseTable(tbl1)とtargetTable(tbl2)にあるデータ」の条件指定です。
この条件に一致するデータが
WHERE NOT EXISTS(~)
なのです。
よって
SELECT tbl1.key, tbl1.column1 FROM baseTable tbl1
WHERE NOT EXISTS(
SELECT 'a'
FROM targetTable tbl2
WHERE tbl2.key = tbl1.key
)
WHERE NOT EXISTS(
SELECT 'a'
FROM targetTable tbl2
WHERE tbl2.key = tbl1.key
)
は
1.「baseTable(tbl1)とtargetTable(tbl2)にあるデータ」以外のデータを
2.baseTable(tbl1)から抽出する
言い換えると
1.baseTable(tbl1)にあるけどtargetTable(tbl2)にないデータを
2.baseTable(tbl1)から抽出する
指定になります。
これで、baseTable(tbl1)にあるけどtargetTable(tbl2)にないデータが抽出できました。
あとは、この抽出結果をtargetTable(tbl2)に突っ込めば完了です。
ということで
INSERT INTO targetTable (key, column1)
SELECT tbl1.key, tbl1.column1 FROM baseTable tbl1
WHERE NOT EXISTS(
SELECT 'a'
FROM targetTable tbl2
WHERE tbl2.key = tbl1.key
)
SELECT tbl1.key, tbl1.column1 FROM baseTable tbl1
WHERE NOT EXISTS(
SELECT 'a'
FROM targetTable tbl2
WHERE tbl2.key = tbl1.key
)
を実行すれば、baseTable(tbl1)にあるけどtargetTable(tbl2)にないデータが
targetTable(tbl2)に突っ込まれます。
そんな感じ\(--)/
category:● SQLServer thema:システム開発 - genre:コンピュータ Posted by ササキマコト