私は2つのテーブルを持っています。元のデータ(t1)といくつかの操作が実行された後に変更されたデータを持つものです。 2つのテーブルの構造は同じです(列 - GUID、ID、値)。 GUID、IDは主キーを形成する。共通の列を持つ2つのテーブルの相違を取得するクエリを作成します
GUIDとIDは、操作後も同じままです。ただし、一部のID(t1内)はt2ではなく、一部はt2で追加されている場合があります。 サンプル -
私は3に問題を分割している -
t1 t2
GUID ID Value GUID ID Value
(i) 1 a x 1 a x --> same
(ii) 1 b y 1 b w --> VALUE different
(iii) 2 a x --> extra ID in t1
(iv) 2 b z --> extra ID in t2
私の目標は、私の試みは
Difference
GUID ID Value1 Value2
(ii) 1 b y w --> VALUE different
(iii) 2 a x NULL --> extra ID in t1
(iv) 2 b NULL z --> extra ID in t2
(新しい表)次の形式でT1とT2との差を印刷します部品。その値
INSERT INTO Difference(GUID,ID,Value1,Value2)
SELECT t1.GUID, t1.ID, t1.Value, t2.Value from t1, t2
WHERE t1.GUID = t2.GUID and t1.ID = t2.ID and t1.Value != t2.Value
上記クエリが正しい値を返す異なる
挿入行。
IDがt1に存在し、t2に存在しない行を挿入します。 私はこのようなクエリを使用したい - >
INSERT INTO Difference(GUID,ID,Value1) (SELECT t1.GUID, t1.ID, t1.Value from t1, t2 WHERE t1.GUID= t2.GUID and t1.ID IN ((SELECT GUID,ID FROM t1) EXCEPT (SELECT GUID,ID FROM t2))) // I get an error here.
エラー: - サブクエリがEXISTSで導入されていない場合にのみ、1式が選択リストで指定することができます。
IN句には「ID」列のみを選択してください。しかし、それは条件を満たしていません。 IN句でGUIDとIDの両方を使用したい。私は動作しなかった他の多くのクエリを試しました。この結果を得るにはどうすればよいですか?
表と逆の2番目と同じです。
が、私は長い説明のために申し訳ありませんが、その交差点から1つのレコードのみを許可することができます。これは初めてのSQLの使用です。私がこの質問をより良い方法で尋ねることができたら教えてください。 – nan
最初の試みとして悪くないです。基本的には、MySQLがサポートしていないFULL OUTER JOINですが、明らかにエミュレートできます。さらに詳しいヘルプについては、[私は非常に単純なSQLクエリであると思われるものに対してMCVEを提供するのはなぜですか?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-非常にシンプルなSQLクエリー) – Strawberry
リンクありがとうございます。 – nan