- 一時テーブルに古いクエリの結果を選択します。
- 新しいクエリの結果を別の一時テーブルに選択します。
- 外側の表を一方の表から他方の表に結合し、すべての列を等価にします。
- 一方の側または他方の側にヌルがある行だけを返すために、where句を追加します。例えば
、結果は(理論的に)ように見えた場合:
UserId | FirstName | LastName | Email
その後は同じ構造を有する別個の一時テーブルに各クエリを実行し、#resOld
及び「#resNew」を言います。その後
:
SELECT
*
FROM #resOld OLD
LEFT OUTER JOIN #redNew NEW -- LEFT OUTER JOIN, so we still retain rows which don't match
ON NEW.UserId = OLD.UserId
AND NEW.FirstName = OLD.FirstName
AND NEW.LastName = OLD.LastName
AND NEW.Email = OLD.Email
WHERE OLD.UserID IS NULL -- Only retain rows where we didn't match. Can use any field from OLD which cannot be null by design.
他の行と一致しない設定1つの結果から行がある場合は、このクエリは行のみが返されます。
EDIT:それは必要以上に複雑です、あなただけの参加基準を反転し、そのようにWHEREを削除することができます
SELECT
*
FROM #resOld OLD
INNER JOIN #redNew NEW -- Inner join where rows are different.
ON NEW.UserId != OLD.UserId
AND NEW.FirstName != OLD.FirstName
AND NEW.LastName != OLD.LastName
AND NEW.Email != OLD.Email
出典
2011-07-22 13:36:37
xan
主キーの列は何ですか?各クエリのどのフィールドが各行に固有であるか。 –
申し訳ありません。両方のクエリは1つのフィールドのみを返します。明らかに、それは両方で同じ名前になっています。このフィールドには重複する値は含まれません。 – Urbycoz