Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Abfrage mit verschiedenen Tabellen (https://www.delphipraxis.net/154815-sql-abfrage-mit-verschiedenen-tabellen.html)

zeras 26. Sep 2010 17:36

Datenbank: Firebird • Version: 2.5 • Zugriff über: Delphi

SQL Abfrage mit verschiedenen Tabellen
 
Ich bekomme einfach die Abfrage aus 3 verschiedenen Tabellen nicht hin. 2 kann ich verknüpfen, aber wenn ich die 3. mit einbauen will, kommen immer Fehlermeldungen vom SQL.
Hintergrund ist, dass bei den einzelnen Maschinennummern die Anzahl der Datumseinträge, die in SWDATE hinterlegt sind, angezeigt werden sollen. Das geht auch, aber wenn ich statt der KUND_ID dann den Kundennamen aus der Tabelle anzeigen will, bekomme ich das nicht hin.

Abfrage, die geht:
Hier bekomme ich die Anzahl der Versionen angezeigt mit Maschinennnummer. Es fehlt nur noch der Kundenname
SQL-Code:
SELECT V.MANU AS Maschinennummer, COUNT (V.MANU) AS Anzahl FROM MANUS V JOIN SWDATE A ON (A.MANU_ID = V.MANU_ID) GROUP BY V.MANU HAVING(COUNT(a.manu_id));
Hier bekomme ich die Maschinennummer und den Kunden, aber die Anzahl aus SWDATE fehlt
SQL-Code:
SELECT MANUS.MANU AS Maschinennummer, KUNDEN.KUNDENNAME AS Kunde FROM MANUS JOIN KUNDEN ON (MANUS.KUND_ID = KUNDEN.KUND_ID);
Es ist wahrscheinlich mit einem 2. Join zu lösen, aber alle Versuche schlugen bisher fehl.

Meine Tabellen sehen wie folgt aus:

SQL-Code:
CREATE TABLE "MANUS"
(
  "MANU_ID"   INTEGER NOT NULL,
  "MANU"   CHAR(8),
  "KUND_ID"   INTEGER,
 PRIMARY KEY ("MANU_ID")
);

CREATE TABLE "SWDATE"
(
  "MANU_ID"   INTEGER,
  "DATUM"   DATE
);

CREATE TABLE "KUNDEN"
(
  "KUND_ID"   INTEGER NOT NULL,
  "KUNDENNAME"   VARCHAR(100),
CONSTRAINT "PK_KUNDEN" PRIMARY KEY ("KUND_ID")
);

jfheins 26. Sep 2010 18:00

AW: SQL Abfrage mit verschiedenen Tabellen
 
Zitat:

Zitat von zeras (Beitrag 1052220)
aber wenn ich die 3. mit einbauen will, kommen immer Fehlermeldungen vom SQL.
Es ist wahrscheinlich mit einem 2. Join zu lösen, aber alle Versuche schlugen bisher fehl.

Fehlermeldungen ??

Ich hab den 2. Join mal schnell reingebastelt:
SQL-Code:
SELECT
   V.MANU AS Maschinennummer,
   COUNT (V.MANU) AS Anzahl
FROM MANUS V
JOIN SWDATE A ON (A.MANU_ID = V.MANU_ID)
JOIN KUNDEN K ON (K.KUND_ID = V.KUND_ID)
GROUP BY V.MANU
HAVING(COUNT(a.manu_id));

zeras 26. Sep 2010 18:12

AW: SQL Abfrage mit verschiedenen Tabellen
 
Danke für den Tipp.
Wenn ich das Semikolon drin lasse, dann kommt Token unknown, wenn ich das Semi weglasse, dann Unexpeted End of command.
Irgendwas muss da noch nicht mit der Syntax passen.

SQL-Code:

SELECT
   V.MANU AS Maschinennummer,
   COUNT (V.MANU) AS Anzahl,
   V.KUND_ID AS Kunde --> das geht nicht
FROM MANUS V
JOIN SWDATE A ON (A.MANU_ID = V.MANU_ID)
JOIN KUNDEN K ON (K.KUND_ID = V.KUND_ID)
GROUP BY V.MANU
HAVING(COUNT(a.manu_id)>1)

omata 26. Sep 2010 18:16

AW: SQL Abfrage mit verschiedenen Tabellen
 
Was soll der Blödsinn mit dem HAVING?

SQL-Code:
SELECT K.KUNDENNAME AS Kunde, V.MANU AS Maschinennummer, COUNT(*) AS Anzahl
FROM MANUS V
INNER JOIN SWDATE A
  ON V.MANU_ID = A.MANU_ID
INNER JOIN KUNDEN K
  ON V.KUND_ID = K.KUND_ID
GROUP BY V.MANU, K.KUNDENNAME

zeras 26. Sep 2010 18:17

AW: SQL Abfrage mit verschiedenen Tabellen
 
Zitat:

Zitat von omata (Beitrag 1052230)
Was soll der Blödsinn mit dem HAVING?

SQL-Code:
SELECT K.KUNDENNAME AS Kunde, V.MANU AS Maschinennummer, COUNT(*) AS Anzahl
FROM MANUS V
INNER JOIN SWDATE A
  ON V.MANU_ID = A.MANU_ID
INNER JOIN KUNDEN K
  ON V.KUND_ID = K.KUND_ID
GROUP BY V.MANU, K.KUNDENNAME

Sorry, hatte noch was weggelassen mit Having. Weiter oben nun das korrekte Having.

zeras 26. Sep 2010 18:20

AW: SQL Abfrage mit verschiedenen Tabellen
 
Nun mit Having und Funktion OK. Ich wollte nur die anzeigen, wo mehr als ein Datum angelegt ist.
Vielen Dank.

SQL-Code:
SELECT K.KUNDENNAME AS Kunde, V.MANU AS Maschinennummer, COUNT(*) AS Anzahl
FROM MANUS V
INNER JOIN SWDATE A
  ON V.MANU_ID = A.MANU_ID
INNER JOIN KUNDEN K
  ON V.KUND_ID = K.KUND_ID
GROUP BY V.MANU, K.KUNDENNAME
HAVING(COUNT(a.manu_id)>1)

omata 26. Sep 2010 18:23

AW: SQL Abfrage mit verschiedenen Tabellen
 
und hier nochmal der Schönheit halber...
SQL-Code:
SELECT K.KUNDENNAME AS Kunde, V.MANU AS Maschinennummer, COUNT(*) AS Anzahl
FROM MANUS V
INNER JOIN SWDATE A
  ON V.MANU_ID = A.MANU_ID
INNER JOIN KUNDEN K
  ON V.KUND_ID = K.KUND_ID
GROUP BY V.MANU, K.KUNDENNAME
HAVING COUNT(*) > 1


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 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