Infomeldung bei SELECT ohne Ergebnis

MysterioJN

SQL-Guru
Beiträge
158
Hallo zusammen,
hallo Ukulele ;),

hab wieder was denk ich einfaches.

Aktuell IST:
Im Front-End frage ich einen Select ab, der aber unter Umständen keinen Datensatz aufweisen kann.
Jetzt soll er nicht nichts anzeigen, sondern beispieltext "Keine Varianten verfügbar".

Ich habe es mit Case IS NULL auf "AS Variante" versucht, aber IS NULL ist denke ich generell falsch, wenn es gar keinen Datensatz gibt oder?


Code:
Select
aid_Medien.dbo.Variante.Name AS Variante

FROM aid_Medien.dbo.MedStamm
LEFT JOIN aid_Medien.dbo.MedVariante ON aid_Medien.dbo.MedVariante.MedStamm_PIDX = aid_Medien.dbo.MedStamm.PIDX

INNER JOIN aid_Medien.dbo.Variante ON aid_Medien.dbo.Variante.PIDX = aid_Medien.dbo.MedVariante.Variante_PIDX

INNER JOIN aid_Medien.dbo.Auflage on aid_Medien.dbo.Auflage.PIDX = aid_Medien.dbo.MedStamm.Auflage_PIDX
 
Werbung:
vielleicht so:

Code:
test=# create table nixtest(id int);
CREATE TABLE
test=*# insert into nixtest values (1);
INSERT 0 1
test=*# select id::text from nixtest where id = 1 union all select 'da ist nix' limit 1;
 id
----
 1
(1 Zeile)

test=*# select id::text from nixtest where id = 2 union all select 'da ist nix' limit 1;
  id   
------------
 da ist nix
(1 Zeile)

test=*#

Anpassen an Deine Belange überlasse ich Dir zur Übung ;-)
 
ähm... nix verstehen... aber dennoch danke...

;)


Das kann doch nicht so kompliziert sein... immerhin gibt es IS NULL beim CASE, also müsste es doch vergleichbares geben NOT EXISTS oder so. Aber das klappt/erkennt er nicht.

Beste Grüße
 
das Problem ist: wenn kein Datensatz zurückkommt, dann ist da halt kein Datensatz. Nicht einmal NULL und nicht 42 mal NULL, sondern quasi NULL mal NULL.
 
Hmm das heißt, es gibt also keine Funktion dahinter und auch nicht die Antwort "42 mit Handtuch" auf alle Fragen ;)

Ok dann geb ich es auf. Danke und dir einen schönen sonnigen Tag!
 
*Mich hinter die Arbeit setze*

AAALSO: Ja, auch ich habe mich erst Gestern konkret mit einem Union-Query beschäftigt, aber, wenn man es einmal hat, scheint es logisch (wie alles, in einem Computer, weil es ja Prinzipiel nur logische Ziffernfolgerungen von 0 und 1 sind).

Grundlagen:
Bei einer Union sind 2 Abfragen vorhanden.
Bei einer Union müssen beide Abfragen gleichviele Spalten haben.
Bei einer Union müssen beide die Spalten 1-x der 1. Abfrage den selben Dateityp haben, wie die Spalten 1-x der 2. Abfrage.

Es gibt einen Except-Union-Query, welcher wiederum dazu dient, Werte auszuschließen, die in der 2. Abfrage vorkommen.
Um ein Beispiel zu nennen:
Code:
select * from generate_series(1, 10) except select '1';
Es kommen jetzt also 9 Datensätze heraus, nämlich alle 10 eigentlich gewählten Datensätze, aus dem, wo der Datensatz gleich 1 ist.

Die nächste Intersect-Query-Art wäre, gibt alle Werte zurück, die bei der 1. und 2. Abfrage identisch sind.
Um ein Beispiel zu nennen:
Code:
select * from generate_series(1, 10) intersect select '1';
Es kommt nur 1 Datensatz raus, nämlich genau der, wo die 1. Abfrage eine 1 enthält.

Der dritte wäre ein Union-Query, welcher sozusagen, wie ich es verstehe, einen Join zwischen 2 Abfragen macht, glaube ich,
Um auch hier ein Beispel zu nennen:
Code:
select * from generate_series(1, 10) union select '11';
Hier kommen 11 Ergebnisse raus, weil er alle Datensätze (10) au der 1. Abfrage nimmt, und 1 Datensatz aus der 2. Abfrage, also die Zahlen 1-11 !

Bekomme ich jetzt ein Schild mit der Aufschrift "Streber" ?

Anhang: Mit den diversen Union-Arten mit dem Wort "all" nach dem Ausdruck, welcher eine Union aufruft, habe ich mich noch nicht beschäftigt.

EDIT: Man darf mich ausbessern ;) Ich nehme auch gerne Lob an xD
EDIT 2: Also, wo man mich noch erweitern könnte, wäre auf jeden Fall meine Union-Query (die 3., weil ich mich da ... auch nicht bestens auskenne), und gegebenenfalls bei den Union All-Methoden, die ich hier nicht erwähnt habe
EDIT 3: Gegebenenfalls muss das Ganze für das entsprechend andere SQL abgewandelt werden, die Codes sind in PGSQL geschrieben

EDIT 4, weil es mir gerade voll gefällt:
das Problem ist: wenn kein Datensatz zurückkommt, dann ist da halt kein Datensatz. Nicht einmal NULL und nicht 42 mal NULL, sondern quasi NULL mal NULL.

Muss sein, aber:
NULL mal NULL ist doch immernoch NULL, weil es ja keinen Positiven, oder Negativen Aspekt hat :/
Mr. Elephant setzt redundandte Datensätze an!

EDIT5: Ich denke, das wird der letzte Edit hier sein xD
Ich habe auch eine Ewigkeit mit Joins arbeiten wollen, aber es geht halt teilweise nicht so wie man will :D
 
Zuletzt bearbeitet:
Das ist super nett von Euch, dennoch versteh ich die Logik dahinter nicht wie mir UNION dabei helfen soll?

Noch mal zu einem Fall:

Tabelle A hat einen Artikel mit der Nummer 1234

in Tabelle B (Zusatzinfos) gibt es diese Nummer 1234 nicht, da vlt nicht notwendig.


Wenn ich also einen Select darauf (mit Join wie auch sonst?!) baue - was ich dennoch muss, da es Artikel gibt die Zusatzinfos haben und dann angezeigt werden - ist aber in diesem Fall das Ergebnis ja leer, da keine Infos in Tabelle B vorhanden zur Nummer 1234

Bei genau diesem "leer" will ich einen ' Text ' anzeigen lassen für den User.

Also muss es doch einen Ausdruck dafür geben, den ich dann mit CASE WHEN THEN ELSE als Meldung ausgeben kann.
 
Werbung:
Ok ich löse das jetzt anders: Ich behelfe mir mit CASE WHEN "COUNT( )" = 0 THEN ...
im Join und es klappt.

Sicherlich nicht die eleganteste Lösung, aber auf eine andere komme ich nicht.


Dank euch hier.
 
Zurück
Oben