DISTINCT ueber zwei Spalten?

DISTINCT ueber zwei Spalten?

am 08.10.2006 13:38:41 von Sebastian Suchanek

Hallo NG!

Kann ich eine MySQL-Abfrage so gestalten, daß ich alle Einträge,
die in einer *oder* einer zweiten Spalte stehen, jeweils nur
einmal erhalte?
Also sowas wie "SELECT DISTINCT (spalte1 AND spalte2)...".

Als Beispiel:

spalte1 | spalte2
--------+--------
1 | NULL
1 | 2
2 | 5
3 | NULL
4 | 5

Gewünschtes Ergebnis:

foo
---
1
2
3
4
5


Tschüs,

Sebastian

PS: Ob die NULL-Werte wie im obigen Beispiel nun wirklich
'rausfliegen oder nicht, ist nicht so wichtig. Das kann ich
notfalls auch im weiterverarbeitenden Skript lösen.

--
http://www.baumaschinen-modelle.net
http://www.schwerlast-rhein-main.de

Re: DISTINCT ueber zwei Spalten?

am 08.10.2006 13:57:44 von dnoeth

Sebastian Suchanek wrote:

> spalte1 | spalte2
> --------+--------
> 1 | NULL
> 1 | 2
> 2 | 5
> 3 | NULL
> 4 | 5
>
> Gewünschtes Ergebnis:
>
> foo
> ---
> 1
> 2
> 3
> 4
> 5

Du suchst die Vereinigungsmenge:

select spalte1 from tab
union
select spalte2 from tab

> PS: Ob die NULL-Werte wie im obigen Beispiel nun wirklich
> 'rausfliegen oder nicht, ist nicht so wichtig.

select spalte1 from tab where spalte1 is not null
union
select spalte2 from tab where spalte2 is not null

Dieter

Re: DISTINCT ueber zwei Spalten?

am 08.10.2006 15:06:56 von Johannes Vogel

Hi Dieter, Sebastian

Dieter Noeth wrote:
> Du suchst die Vereinigungsmenge:
> select spalte1 from tab
> union
> select spalte2 from tab
>> PS: Ob die NULL-Werte wie im obigen Beispiel nun wirklich
>> 'rausfliegen oder nicht, ist nicht so wichtig.
> select spalte1 from tab where spalte1 is not null
> union
> select spalte2 from tab where spalte2 is not null

Vollständigkeitshalber:

select distinct spalte from (
select spalte1 spalte from tab
union
select spalte2 spalte from tab) a
where spalte is not null;


HTH; Johannes

Re: DISTINCT ueber zwei Spalten?

am 08.10.2006 15:30:53 von Thomas Rachel

Johannes Vogel wrote:

>> select spalte1 from tab where spalte1 is not null
>> union
>> select spalte2 from tab where spalte2 is not null
>
> Vollständigkeitshalber:
>
> select distinct spalte from (
> select spalte1 spalte from tab
> union
> select spalte2 spalte from tab) a
> where spalte is not null;

Ist eine Abkürzung, ja. Aber DISTINCT an der Stelle bringt nix, weil UNION
(im Gegensatz zu UNION ALL) bereits DISTINCTet...


Thomas
--
Murphy's Gesetz ist nicht umkehrbar. Das Auto zu waschen, damit es
regnet, funktioniert nicht.