MySQL - Ist es möglich, dass 'der Unterschied' von zwei Abfrage-Ergebnis?
Brauche ich zum Zusammenführen von zwei Abfrageergebnisse als in der union, aber ich möchte nur die Differenz zwischen den beiden Ergebnissen. Ist das möglich?
Ich bin im Grunde genommen Auswahl ALLER Ressourcen in Abfrage 1 und NICHT-ERLAUBT-Ressourcen in Abfrage 2 habe ich offensichtlich müssen die ZULÄSSIGEN Ressourcen in meinem letzten Ergebnis.
In pseodo-code:
Query1 - Query2
Queryresult 1:
+-------+
| id |
+-------+
| 1 |
+-------+
| 2 |
+-------+
| 3 |
+-------+
| 4 |
+-------+
| 5 |
+-------+
| 6 |
+-------+
Queryresult 2:
+-------+
| id |
+-------+
| 2 |
+-------+
| 5 |
+-------+
Benötigt:
+-------+
| id |
+-------+
| 1 |
+-------+
| 3 |
+-------+
| 4 |
+-------+
| 6 |
+-------+
InformationsquelleAutor der Frage Ropstah | 2009-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie diese, mit
NOT IN
:InformationsquelleAutor der Antwort nickf
Getestet habe ich diese Abfrage in SQLExpress, da habe ich nicht MySql. Ich gehe davon aus, dass es funktioniert auf die gleiche Weise.
InformationsquelleAutor der Antwort John Fisher
Den left join-Ansatz ist flexibler, da man es auf zwei Tabellen (oder zwei beliebige query-Ergebnismengen), wo die Eindeutigkeit nicht aus eine - id, aber eine combo von mehreren Spaltenwerten. Auch ist es besser als SQL (oder zumindest früher) zur master-outer-joins (s.ein. Links), da Sie mehr Leistung bietet, als das schreiben von verschachtelten selects.
InformationsquelleAutor der Antwort Sven
Wird es
AUßER
Befehl inMariaDB
in der version 10.3.In der Zwischenzeit, wenn Sie brauchen volle Differenz, und nicht nur auf einem Feld, können Sie
CONCAT
Abhilfe. Die Idee ist, zu verketten alle Felder Ihrer ersten Abfrage, und fügen SiePick-up ein anderes Trennzeichen statt Komma, wenn die Felder Werte enthalten kann, die durch Kommas. Auch, hinzufügen
IFNULL
überprüfen Sie für Felder, die möglicherweise null-Werte enthalten.InformationsquelleAutor der Antwort izogfif