Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datensatz immer ausgeben (https://www.delphipraxis.net/156407-datensatz-immer-ausgeben.html)

joachimd 2. Dez 2010 09:34

AW: Datensatz immer ausgeben
 
Zitat:

Zitat von Tyrolean (Beitrag 1065566)
So müsste das doch auch gehen:

SQL-Code:
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

liefert in meiner Testumgebung auch nur 2 Restaurants, nicht alle drei;)
PS: Das ist meine Test-Datenbank (in ADS):
SQL-Code:
create table restaurants(id integer, name cichar(30));
create table gerichte(id integer, restaurant_id integer, name cichar(30));
create table bestellungen(id integer,gericht_id integer, datum date);

insert into restaurants values(1,'Löwen');
insert into restaurants values(2,'Ochsen');
insert into restaurants values(3,'Sonne');

insert into gerichte values(1,1,'Braten');
insert into gerichte values(2,1,'Schnitzel');
insert into gerichte values(3,2,'Eintopf');
insert into gerichte values(4,2,'Suvlaki');
insert into gerichte values(5,3,'Pommes');
insert into gerichte values(6,3,'Currywurst');

insert into bestellungen values(1,1,curdate());
insert into bestellungen values(2,2,curdate());
insert into bestellungen values(3,3,curdate());

jobo 2. Dez 2010 10:19

AW: Datensatz immer ausgeben
 
Wenn die Restaurants nicht extra ausgewertet werden (mit outer join), können die leeren auch nicht auftauchen. Dein erstes Beispiel war gut.

rokli 2. Dez 2010 11:10

AW: Datensatz immer ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,

beim Microsoft SQL Server gibts den Befehl COALESCE

Abfrage 1:

SELECT smiGkLage FROM tblTest

Das Ergebnis siehst Du in Ergebnis1.JPG

Abfrage 2:

SELECT COALESCE(smiGkLage, -1) FROM tblTest

Das Ergebnis wird durch COALSECE so manipuliert, dass wenn das Ergebnis NULL ist, der 2. Wert in der Klammer eingesetzt wird. (siehe Ergebnis2.jpg)

Vielleicht gibst in Deiner DB auch so eine Möglichkeit

Gruß
Rolf

jobo 2. Dez 2010 12:07

AW: Datensatz immer ausgeben
 
Coalesce ist manchmal nützlich, aber nicht, wenn man gar keinen Datensatz hat.
Die Anforderung war, "Datensatz immer ausgeben", nicht "Feld immer anzeigen".

Ein Datensatz wird immer ausgegeben, wenn alle where - Bedingungen passen, ob aus einem Join oder wie auch immer. Das Beispiel von Joachim zeigt das ja schon.

Tyrolean 2. Dez 2010 13:36

AW: Datensatz immer ausgeben
 
So gehts bei mir nun auch

SQL-Code:
SELECT DISTINCT
  Sum(case when bestellungen.datum is null then 0 else 1 end) AS Anzahl,
  restaurants.id AS Id
FROM restaurants,gerichte
left outer join bestellungen on bestellungen.gericht_id = gerichte.id
WHERE
gerichte.restaurant_id = restaurants.id
AND (bestellungen.datum = CURRENT_DATE() OR bestellungen.datum is null)
GROUP BY restaurants.id


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz