Ich versuche, zwei ähnliche Tabellen zu vergleichen, die identische Strukturen haben. So führen Sie mir die folgende SQL:Vergleichen von Daten in zwei ähnlichen Tabellen
select * from mainTable g1 left join comparisonTable g2 on g2.SettingName=g1.SettingName
(die Tabellen Spalten: ID, Setting, SettingValue, Timestamp)
Und das Abfrage funktioniert OK, aber ich mag die Ergebnisse, um nur Zeilen beschränken, wobei der G2.SettingValue NULL ist oder sich von G1.SettingValue unterscheidet.
So ändere ich die SQL-oben:
select * from mainTable g1 left join comparisonTable g2 on g2.SettingName=g1.SettingName where g1.SettingValue <> g2.SettingValue OR g2.SettingValue Is NULL
JEDOCH diese gibt nur die Zeilen, die die zweite Bedingung erfüllt. Wenn ich es einfach ohne
OR g2.SettingValue Is NULL
starte ich bekomme überhaupt keine Zeilen. Aber viele Zeilen scheinen diese Abfrage zu erfüllen. Sie erscheinen jedoch nicht.
Diese SQL das Problem veranschaulichen soll:
create table mainTable ([ID] [int] IDENTITY(1,1) NOT NULL, [settingname] [varchar](200) NULL, [settingvalue] [varchar](200))
create table comparisonTable ([ID] [int] IDENTITY(1,1) NOT NULL, [settingname] [varchar](200) NULL, [settingvalue] [varchar](200))
insert into maintable(SettingName, SettingValue) Values ('SettingName1','one'),('SettingName2','two'),('SettingName3','three')
insert into comparisonTable(SettingName, SettingValue) Values ('SettingName1','one'),('SettingName2','two'),('SettingName3','three')
Dann laufen:
select * from mainTable g1 full outer join comparisonTable g2 on g2.SettingName=g1.settingName
Dann laufen:
insert into mainTable(SettingName, SettingValue) Values ('SettingName4','four')
Versuchen Sie, die zusätzlichen zwei Bedingungen auch für die Join-Bedingung; Stellen Sie sicher, dass Sie passende Klammern haben – techspider
'Aber viele Zeilen scheinen diese Abfrage zu erfüllen ', kümmern Sie sich darum, einige dieser Zeilen zu posten? – Lamak