![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: isql.exe
Datensatz immer ausgeben
Guten Morgen,
ich bräuchte nochmal eure Hilfe ;) Ich habe folgende Abfrage:
SQL-Code:
Ausgabe:
SELECT DISTINCT COUNT(gerichte.restaurant_id), restaurants.id
FROM restaurants,bestellungen,gerichte WHERE bestellungen.gericht_id = gerichte.id AND gerichte.restaurant_id = restaurants.id AND bestellungen.datum = CURRENT_DATE GROUP BY restaurants.id;
SQL-Code:
Diese gibt die Anzahl der Bestellunge der jeweiligen Restaurants aus.
COUNT ID
============ ============ 3 1 1 2 Doch wenn es keine Bestellungen in einem Restaurant gibt, wird auch nichts ausgebeben. Wie bekomm ich es nun hin, das für jede restaurant.id die Anzahl ausgegeben wird, auch wenn keine Bestellungen vorhanden sind.Also in diesem fall dann eine 0 oder Null. Also folgendermaßen: Ausgabe:
SQL-Code:
Ich habe schon einge Sachen versucht, doch leider find ich nicht den richtigen Weg :(
COUNT ID
============ ============ 0(NULL) 0 3 1 1 2 Gibt es evnt einen Parameter, der dies ermöglicht? Danke schonmal für jede Hilfe ;) |
AW: Datensatz immer ausgeben
Ich hab jetzt die Verarbeitung des Outputs geändert. Aber es würde mich trotzdem interessieren ob es möglich ist ;)
|
AW: Datensatz immer ausgeben
Ungetestet:
SQL-Code:
[edit] In COUNT(*) geändert, siehe
SELECT COUNT(*), restaurants.id
FROM restaurants LEFT JOIN gerichte ON gerichte.restaurant_id = restaurants.id LEFT JOIN bestellungen ON bestellungen.gericht_id = gerichte.id WHERE bestellungen.datum = CURRENT_DATE GROUP BY restaurants.id; ![]() |
AW: Datensatz immer ausgeben
Mhh klappt leider nicht ;)
Kommt das gleiche wie bei mir raus. |
AW: Datensatz immer ausgeben
poste mal kurz die DDL für Deine Tabellen. Macht das Nachbauen leichter;)
|
AW: Datensatz immer ausgeben
imho, klappt der Vorschlag mit dem Left Join von DeddyH aufgrund des WHERE-Statements nicht.
(Weil für ein Restaurant ohne Einträge die Bedingung niemals wahr ist...?!) |
AW: Datensatz immer ausgeben
Guter Einwand. Dann versuchen wir es doch mal so:
SQL-Code:
Ich bin aber im Moment anderweitig beschäftigt, kann mich daher nicht ausreichend mit dem Problem auseinandersetzen.
SELECT COUNT(*), restaurants.id
FROM restaurants LEFT JOIN gerichte ON gerichte.restaurant_id = restaurants.id LEFT JOIN bestellungen ON bestellungen.gericht_id = gerichte.id AND bestellungen.datum = CURRENT_DATE GROUP BY restaurants.id |
AW: Datensatz immer ausgeben
ok, habs nachgebaut. Was Du brauchst, ist ein outer join Deines Ergebnisses mit der restaurants-Tabelle:
SQL-Code:
SELECT a.*, b.Anzahl FROM restaurants a LEFT OUTER JOIN ( SELECT DISTINCT COUNT(gerichte.restaurant_id) AS Anzahl, restaurants.id AS Id FROM restaurants,bestellungen,gerichte WHERE bestellungen.gericht_id = gerichte.id AND gerichte.restaurant_id = restaurants.id AND bestellungen.datum = CURRENT_DATE GROUP BY restaurants.id ) b on a.id=b.id |
AW: Datensatz immer ausgeben
Hallo ;)
Sorry das ich mich erst so spät melde, hatte grade einiges zu tun ;) Danke mal wieder an DeddyH für die bemühungen ;) Und natürlich ein Danke an joachimd für den Lösungsweg ;) Ich werd mir das jetzt mal genau anschauen, hatte mich noch nicht mit den Joins auseinandergesetzt, aber ich wußte das es i-wie geht :P Gruß |
AW: Datensatz immer ausgeben
Zitat:
SQL-Code:
Eventuell den count noch anpassen
SELECT DISTINCT COUNT(gerichte.restaurant_id) AS Anzahl, restaurants.id AS Id
FROM restaurants,bestellungen,gerichte WHERE bestellungen.gericht_id = gerichte.id AND gerichte.restaurant_id = restaurants.id AND (bestellungen.datum = CURRENT_DATE OR bestellungen.datum is null) GROUP BY restaurants.id Gruß günter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz