Zum Inhalt springen
  • 0

SQL mit row_count


Thomas Rogenmoser

Frage

Ich möchte eine SQL erstellen, die IMMER eine Antwort ausgibt:
Entweder die gefundenen Datensätze oder eine Meldung "nichts gefunden"...

Aus dem FB Handbuch abgeleitet versuche ich:

SELECT id, artikelnr FROM art WHERE id = 999;
if (row_count = 0) then SELECT 0 AS id, 'No matching record' AS artikelnr FROM RDB$DATABASE;

Das geht so aber nicht.

ChatGPT hat eine andere Idee, die ebenfalls nicht klappt:

SELECT
COALESCE(
(SELECT id, artikelnr FROM art WHERE id = 999),
(SELECT 0 AS id, 'No matching record' AS artikelnr FROM RDB$DATABASE)
) AS result_text
FROM RDB$DATABASE;

Hat jemand eine bessere Idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

3 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

Hey,

 

schau mal ob dir das weiterhilft wie du's dir wünscht.

SELECT 'No matching records found' AS result, NULL AS artikelnr
FROM RDB$DATABASE
WHERE NOT EXISTS (
  SELECT id
  FROM ART
  WHERE id = :"Artikelid"
)
UNION ALL

SELECT id, artikelnr FROM art
WHERE EXISTS (
  SELECT id, artikelnr
  FROM ART
  WHERE art.id = :"Artikelid"
)

Grüße

Bearbeitet von A.Froehling
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Danke ja, das hilft. Aber ich glaube du hast was anderes gemeint:
 

SELECT 'No matching records found' AS id, NULL AS artikelnr
FROM RDB$DATABASE
WHERE NOT EXISTS (
  SELECT id
  FROM ART
  WHERE id = :"Artikelid"
)
UNION ALL

SELECT id, artikelnr
FROM ART
WHERE art.id = :"Artikelid"

Nach dem Union muss direkt das gesuchte kommen,  ohne Verpackung where exists... sonst gibt das alle Datensätze aus, falls datensatz X existiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Was mich noch interessieren würde ist, woran denn meine beiden anfänglichen Ansätze scheitern.

Einerseits einfach für's Verständnis.
Anderereseits weil:
Das Problem von WHERE EXISTS mit UNION ist, dass man dabei das SELECT für die gesuchten Daten doppelt hat. Im Beispiel oben kein Problem, aber bei längeren Queries wird's unübersichtlich, insbesondere wenn man etwas daran anpassen will.
(Was ich damit mache ist z.B. "Liste aller Artikel mit Bestand aber keiner Webshop-Zuordnung" (das ging dann meist vergessen und muss korrigiert werden).)
Darum wäre eine Lösung praktischer, die ohne Doppelung auskommt.

Eine andere Idee wäre, den No-Result Teil in einem Report zu machen.
Das habe ich noch nicht gesehen, wie man einen eigenen Report für Freie SQL anlegt.

Ich denke aber, die Tabellenanzeige ohne Report ist ohnehin praktischer, weil man da zb. die Artikelnr. direkt als klickbaren Link zum Artikel hat.
grafik.png.423969f8f4a550ebddd2f54f3d450b2d.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...