2009-10-15 3 views
12

Ich muss zwei Abfrageergebnisse wie in Vereinigung zusammenführen, aber ich möchte nur den Unterschied zwischen den beiden Ergebnissen beibehalten. Ist das möglich?MySQL - Ist es möglich, den Unterschied zwischen zwei Abfrageergebnissen zu erhalten?

Ich wähle grundsätzlich ALLE Ressourcen in Abfrage 1 und NOT-ALLOWED Ressourcen in Abfrage 2, ich brauche natürlich die Ressourcen in meinem letzten Ergebnis ERLAUBEN.

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 | 
+-------+ 
+0

Die Anforderung ist unklar. In der Textbeschreibung wird erwähnt, dass ALL von query1 genommen wird, aber das Beispiel widerspricht dem. Versuchen wir, die Anforderung nur durch das Beispiel zu definieren. Wenn query2 7 oder 0 hätte, wären diese Werte in der Differenz enthalten? – mjv

+1

Ich stimme zu, dass der Titel nicht mit dem Fragetext übereinstimmt, aber die Frage selbst ist ziemlich klar. Das OP bittet um Subtraktion: alle Ressourcen, die nicht "nicht verfügbar" sind: "A - B" – nickf

+0

Für eine Minute dachte ich, er würde Abfrage 1 Feldwerte abziehen, um 2 Feldwerte abzufragen. – putolaruan

Antwort

40

Wie diese mit NOT IN:

SELECT id FROM queryOneTable 
WHERE id NOT IN (
    SELECT id FROM queryTwoTable 
) 
+1

so einfach ist, aber so funktioniert :) – Ropstah

4

ich diese Abfrage in SQLExpress getestet, da ich MySql nicht haben. Ich gehe davon aus, dass es genauso funktioniert.

select x.id 
from x 
left join y on x.id = y.id 
where y.id is null 
+0

sollte es sein 'wählen x.id' –

1

Die LEFT JOIN Ansatz vielseitiger, da Sie es an zwei Tischen (oder zwei beliebigen Abfrageergebnisse), wo die Einzigartigkeit besteht nicht aus einem id aber von einer Kombination aus mehreren Spaltenwerten verwenden können. Es wird auch als besser angesehen, SQL (oder zumindest früher) zu verwenden, um äußere Joins zu meistern (s. A. links), da es leistungsfähiger ist als geschachtelte Selects zu schreiben.

Verwandte Themen