UNION Statement

16/12/2008 - 09:52 von Stephan | Report spam
Hallo zusammen,

ich hab mal eine Frage zum Union Schlüsselwort.
Der folgende Code erzeugt eine kleine Tabelle mit fünf Datensàtzen.
Mache ich jetzt zwei Selects mit einem Union verbunden, bekomme ich jedoch
den Datensatz mit der ID = 1 genau zwei mal ausgegeben.
Muss ja auch so sein, weil er ja in beiden Selects betroffen ist.

Gibt es eine Möglichkeit/Befehl dieses Verhalten auszuschalten.
Sprich sobald der Datensatz mit ID = 1 im ersten Select betroffen war, soll er
im zweiten Select nicht mehr mit ausgegeben werden ?

Danke und Grüße
Stephan


SQL:

DECLARE @tt AS TABLE (ID INT, Wert INT)
INSERT INTO @tt VALUES ( 1, 5)
INSERT INTO @tt VALUES ( 2, 6)
INSERT INTO @tt VALUES ( 3, 7)
INSERT INTO @tt VALUES ( 4, 8)
INSERT INTO @tt VALUES ( 5, 9)

SELECT *, 'select1' FROM @tt WHERE Wert >=5
UNION
SELECT ID, WERT, 'select2' FROM @tt WHERE Wert <=5


Ausgabe:
ID Wert
1 5 select1 -- 1x
1 5 select2 -- 2x , der soll nicht mit rein
2 6 select1
3 7 select1
4 8 select1
5 9 select1
 

Lesen sie die antworten

#1 holger rachut
16/12/2008 - 10:35 | Warnen spam
Hi Stephan, ich hàtte da einen anderen Lösungsvorschlag:


Select id, wert, case Wert when >=5 then 'Select 1' Else 'Select 2' End

from @tt

oder du làßt in deinem Beispiel in der zweiten Where Bedingung das "="
weg, also nur <5...


Stephan schrieb:
Hallo zusammen,

ich hab mal eine Frage zum Union Schlüsselwort.
Der folgende Code erzeugt eine kleine Tabelle mit fünf Datensàtzen.
Mache ich jetzt zwei Selects mit einem Union verbunden, bekomme ich jedoch
den Datensatz mit der ID = 1 genau zwei mal ausgegeben.
Muss ja auch so sein, weil er ja in beiden Selects betroffen ist.

Gibt es eine Möglichkeit/Befehl dieses Verhalten auszuschalten.
Sprich sobald der Datensatz mit ID = 1 im ersten Select betroffen war, soll er
im zweiten Select nicht mehr mit ausgegeben werden ?

Danke und Grüße
Stephan


SQL:

DECLARE @tt AS TABLE (ID INT, Wert INT)
INSERT INTO @tt VALUES ( 1, 5)
INSERT INTO @tt VALUES ( 2, 6)
INSERT INTO @tt VALUES ( 3, 7)
INSERT INTO @tt VALUES ( 4, 8)
INSERT INTO @tt VALUES ( 5, 9)

SELECT *, 'select1' FROM @tt WHERE Wert >=5
UNION
SELECT ID, WERT, 'select2' FROM @tt WHERE Wert <=5


Ausgabe:
ID Wert
1 5 select1 -- 1x
1 5 select2 -- 2x , der soll nicht mit rein
2 6 select1
3 7 select1
4 8 select1
5 9 select1




Ähnliche fragen