Verwendung der Where-Klausel mit Union

Ich habe zwei Tabellen, t1 und t2, mit identischen Spalten (id, desc) und data. Aber eine der Spalten, desc, könnte verschiedene data für denselben Primärschlüssel, id, haben.

Ich möchte alle diese Zeilen aus diesen beiden Tabellen so auswählen, dass t1.desc! = T2.desc

select a.id, b.desc FROM (SELECT * FROM t1 AS a UNION ALL SELECT * FROM t2 AS b) WHERE a.desc != b.desc 

Wenn zum Beispiel t1 (1, 'aaa') und (2, 'bbb') hat und t2 (1, 'aaa') und (2, 'bbb1') hat, dann sollte die neue Tabelle (2, 'bbb ') und (2,' bbb1 ')

Dies scheint jedoch nicht zu funktionieren. Bitte lassen Sie mich wissen, wo ich falsch liege und was richtig ist.

Solutions Collecting From Web of "Verwendung der Where-Klausel mit Union"

UNION ALL alle Zeilen des zweiten Teils der Abfrage nach den Zeilen aus, die vom ersten Teil der Abfrage erzeugt wurden. Sie können die Felder von b nicht mit denen von b vergleichen, da sie zu verschiedenen Zeilen gehören.

Was Sie wahrscheinlich tun werden, ist das Auffinden von datasätzen von t1 mit t2 , die denen von t2 , aber anderer Beschreibung. Dies kann durch einen JOIN :

 SELECT a.id, b.desc FROM t1 AS a JOIN t2 AS b ON a.id = b.id WHERE a.desc != b.desc 

Auf diese Weise landen datasätze von t1 mit IDs, die mit den datasätzen von t2 übereinstimmen, in derselben Zeile mit verknüpften data, sodass Sie die Ungleichungen in Beschreibungen vergleichen können.

Ich möchte, dass beide Zeilen ausgewählt werden, wenn die Beschreibungen nicht gleich sind

Sie können UNION ALL zwischen zwei Reihen von Zeilen verwenden, die durch Join erhalten wurden.

 SELECT a.id, b.desc -- t1 is a, t2 is b FROM t1 AS a JOIN t2 AS b ON a.id = b.id WHERE a.desc != b.desc UNION ALL SELECT a.id, b.desc -- t1 is b, t2 is a FROM t2 AS a JOIN t1 AS b ON a.id = b.id WHERE a.desc != b.desc 

Union wird die data nicht vergleichen. Sie müssen sich hier anmelden

 SELECT * FROM t1 AS a inner join t2 AS b on a.id =b.id and a.desc != b.desc 

Der UNION-Operator wird verwendet, um die Ergebnismenge von zwei oder mehr SELECT-statementen zu kombinieren.

Beachten Sie, dass jede SELECT-statement innerhalb der UNION dieselbe Anzahl von Spalten haben muss. Die Spalten müssen auch ähnliche datatypen haben.

Also, wenn es die gleiche Anzahl von Spalten und denselben datatyp hat, dann verwende Union, ansonsten nur verbinden Kann verwendet werden.

 SELECT * FROM t1 AS a inner join t2 AS b on a.id =b.id and a.desc != b.desc