AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Redundante Datenbankabfrage?
Thema durchsuchen
Ansicht
Themen-Optionen

Redundante Datenbankabfrage?

Ein Thema von pustekuchen · begonnen am 25. Nov 2010 · letzter Beitrag vom 25. Nov 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#1

Redundante Datenbankabfrage?

  Alt 25. Nov 2010, 14:15
Datenbank: Firebird • Version: 2.5 • Zugriff über: ISQL
Guten Tag,

ich habe eine Datenbank die folgendermaßen aufgebaut ist.
SQL-Code:
CREATE TABLE restaurants (
id INT,
constraint restaurants_id primary key(id));

CREATE TABLE gerichte (
id INT,
restaurant_id INT NOT NULL,
constraint gerichte_id primary key(id));

CREATE TABLE bestellungen (
id INT,
gericht_id INT NOT NULL,
constraint bestellungen_id primary key(id));
Nun möchte ich ausgeben bekommen, welche Restaurants.id's alle in der Bestellung auftauchen.
D.h Wenn es 5 Restaurants in der Datenbank gibt. Und aber nur bei Restaurant 1 und 3 etwas bestellt wurde, soll auch nur 1 und 3 ausgegeben werden und diese auch nur jeweils 1x.

Ausgabe soll dann so aussehen:
SQL-Code:
          ID
============
           1
           3
Ich habe es folgendermaßen versucht:
SELECT restaurants.id FROM restaurants,bestellungen,gerichte WHERE gerichte.id = bestellungen.gericht_id AND gerichte.restaurant_id = restaurants.id; Doch dort kommt folgendes raus:
SQL-Code:
          ID
============
           0
           0
           0
           1
           1
           1
           1
           1
           1
           1
Es liegt an der fehlenden Beziehung zwischen Bestellungen <-> Restaurants oder?
Oder kann man das anders lösen?

Danke für eure Hilfe
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Redundante Datenbankabfrage?

  Alt 25. Nov 2010, 14:22
Ich kenne mich jetzt mit Datenbanken nicht so besonders gut aus, aber schau dir mal DISTINCT an.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
171 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Redundante Datenbankabfrage?

  Alt 25. Nov 2010, 14:24
Hallo pustekuchen,

wenn du mehrere Bestellungen für ein Restaurant hast, dann werden diese auch genauso oft in deiner
Ausgabe aufgeführt.

Das Zauberwort heisst hier DISTINCT:
Code:
SELECT DISTINCT restaurants.id FROM restaurants,bestellungen,gerichte WHERE gerichte.id = bestellungen.gericht_id AND gerichte.restaurant_id = restaurants.id;
EDIT: Mal wieder zu langsam
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Redundante Datenbankabfrage?

  Alt 25. Nov 2010, 14:25
Aus der hohlen Hand:
SQL-Code:
SELECT
  r.id
FROM
  bestellungen b
JOIN
  gerichte g ON g.id = b.gericht_id
JOIN
  restaurants r ON r.id = g.restaurant_id
Evtl. kannst Du noch gruppieren.

[edit] *Huch*, wo kommen denn die anderen Postings her? [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Redundante Datenbankabfrage?

  Alt 25. Nov 2010, 14:29
Ahhh DISTINCT Klappt wunderbar .Ich wußte doch das es so einen Befehl gibt, danke für den Tipp.


Kann geclosed werden
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Redundante Datenbankabfrage?

  Alt 25. Nov 2010, 14:47
Mhh hätte noch eine frage dazu

Wie könnte ich nun aus der Abfrage mit DISTRICT die Anzahl der Einträge bekommen? Also COUNT(*)
Geht das mit JOIN oder mit 'Subqueries inside aggregate functions'?
Delphi programming is awesome.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Redundante Datenbankabfrage?

  Alt 25. Nov 2010, 14:51
Hallo,

geht denn nicht

SQL-Code:
SELECT count(DISTINCT restaurants.id)
FROM restaurants,bestellungen,gerichte
WHERE gerichte.id = bestellungen.gericht_id AND
gerichte.restaurant_id = restaurants.id
;



Heiko
Heiko

Geändert von mkinzler (25. Nov 2010 um 14:54 Uhr) Grund: SQL-Tag eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Redundante Datenbankabfrage?

  Alt 25. Nov 2010, 14:54
Doch das geht natürlich, nur ich möchte beides in einem, wenn das überhaupt möglich ist
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Redundante Datenbankabfrage?

  Alt 25. Nov 2010, 14:55
Ist denn die Gesamtanzahl gemeint oder je Restaurant?

[edit] Also so?
SQL-Code:
SELECT
  r.id, COUNT(*)
FROM
  bestellungen b
JOIN
  gerichte g ON g.id = b.gericht_id
JOIN
  restaurants r ON r.id = g.restaurant_id
GROUP BY r.id
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (25. Nov 2010 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Redundante Datenbankabfrage?

  Alt 25. Nov 2010, 15:00
@DeddyH Nope.

Mhh Okay ich versuchs mal besser zu erklären.

Bei dieser Abfrage kommt folgendes raus:

SELECT DISTINCT restaurants.id FROM restaurants,bestellungen,gerichte WHERE gerichte.id = bestellungen.gericht_id AND gerichte.restaurant_id = restaurants.id;
SQL-Code:
          ID
============
           0
           1
So und davon möchte ich die Anzahl der Einträge haben, also 2(0 und 1).

So das es z.B. so rauskommt:
SQL-Code:
COUNT(*) ID
=================
 2 0
 2 1
Delphi programming is awesome.

Geändert von pustekuchen (25. Nov 2010 um 15:02 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 Uhr.
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