Where Abfrage - Mehrere Spalten prüfen, >1 Einträge zeigen

littleman

Benutzer
Beiträge
8
Hallo zusammen,

ich wusste jetzt nicht wie ich das Thema bennen sollten, aber ich werde hier mal mein kleines Problem erläutern.
Ich habe eine Tabelle mit folgenden Spalten:
ID, Name, E-Mail, Nr1, Nr2, Nr3, Nr4

Ein Eintrag darf nur eine Nummer haben. Alle weiteren Spalten sind mit NULL.
Ich möchte jetzt eine Abfrage starten die ein Select macht, und mir die zeigt die mehr als einen Eintrag haben in den Spalten Nr(x).

Bsp.:

1 Peter peter@peter NULL NULL NULL 123456789
2 A a@a NULL 987654321 NULL 123456789
3 B b@b NULL NULL NULL 123456789

Ausgabe:

2 A a@a NULL 987654321 NULL 123456789
 
Werbung:
Dein Tabellenaufbau ist falsch, daher artet das auch in Arbeit aus.
Code:
SELECT *
FROM tabelle
WHERE nr1 IS NOT NULL AND ( nr2 IS NOT NULL OR nr3 IS NOT NULL or NR4 IS NOT NULL )
OR nr2 IS NOT NULL AND ( nr1 IS NOT NULL OR nr3 IS NOT NULL or NR4 IS NOT NULL )
OR nr3 IS NOT NULL AND ( nr1 IS NOT NULL OR nr2 IS NOT NULL or NR4 IS NOT NULL )
OR nr4 IS NOT NULL AND ( nr1 IS NOT NULL OR nr2 IS NOT NULL or NR3 IS NOT NULL )
 
folgendes ist vielleicht etwas kürzer:

Code:
test=# select * from littleman ;
 id | n1 | n2 | n3 | n4
----+----+----+----+----
  1 |  1 |  |  |   
  2 |  2 |  |  2 |   
(2 rows)

test=# select * from littleman where (case when n1 is null then 1 else 0 end + case when n2 is null then 1 else 0 end + case when n3 is null then 1 else 0 end + case when n4 is null then 1 else 0 end) < 3;
 id | n1 | n2 | n3 | n4
----+----+----+----+----
  2 |  2 |  |  2 |   
(1 row)

test=#

Unabhängig davon ist natürlich das Design fragwürdig.
 
Werbung:
folgendes ist vielleicht etwas kürzer:

Code:
test=# select * from littleman ;
id | n1 | n2 | n3 | n4
----+----+----+----+----
  1 |  1 |  |  |  
  2 |  2 |  |  2 |  
(2 rows)

test=# select * from littleman where (case when n1 is null then 1 else 0 end + case when n2 is null then 1 else 0 end + case when n3 is null then 1 else 0 end + case when n4 is null then 1 else 0 end) < 3;
id | n1 | n2 | n3 | n4
----+----+----+----+----
  2 |  2 |  |  2 |  
(1 row)

test=#

Unabhängig davon ist natürlich das Design fragwürdig.

Genau das ist es :)
Vielen Dank
 
Zurück
Oben