Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Frage/Probleme bei SELECT über zwei Tabellen (https://www.delphipraxis.net/63872-frage-probleme-bei-select-ueber-zwei-tabellen.html)

CG2003 23. Feb 2006 22:02

Datenbank: MySQL • Version: 4.1 • Zugriff über: Zeos

Frage/Probleme bei SELECT über zwei Tabellen
 
Hallo liebe DP,

ich habe mal wieder ein großes Problem.
Ich mache folgende SELECT-Abfrage aus einer Verbrauchs-Tabelle, in der Ersatzteil-Buchungen protokolliert werden, zur Verbrauchsberechnung:

SQL-Code:
SELECT PartNr, COUNT(*) FROM Buchungen WHERE PartDatum BETWEEN '10.01.2005' AND '20.01.2005' AND PartStatus = 'Abbuchung';
GROUP BY PartNr;
ORDER BY PartNr;
Das funktioniert soweit ganz gut (ich lasse mir den Inhalt von "PartNr" in einem ListView anzeigen, und den Inhalt von "COUNT(*)" als SubItem dahinter. Das ganze sieht dann (ein Beispiel-Eintrag ca. so aus:

101556445 | 22

In meiner Artikelstamm-Tabell sind die Einträge wie folgt gespeichert:

Artikelnummer | Bezeichnung | Hersteller | Typ | Bestand

So, nun möchte ich allerdings das zu der o.g. Part-Nr., die Artikelbezeichnung aus meiner Artikelstamm-Tabelle mit in diesem ListView zu der zugehörigen Part-Nr. angezeigt wird. Also bspw. so:

101556445 | Schraube, flach | 22



Wie geht das, das man zwei Tabellen in dieser Art "verbindet"?
Ich hoffe Ihr habt ungefährt verstanden, was ich meine und worauf ich hinaus will.

Vielen lieben Dank schon mal im Voraus!

Union 23. Feb 2006 22:15

Re: Probleme bei SELCT von zwei Tabellen
 
Das ist dann zwar nicht mehr schnell, aber es geht (ich habe hier ein GROUP BY 1..16 :()
SQL-Code:
SELECT Buchungen.PartNr, Artikel.Bezeichnung, COUNT(*) FROM Buchungen WHERE PartDatum BETWEEN '10.01.2005' AND '20.01.2005' AND PartStatus = 'Abbuchung'
LEFT OUTER JOIN Artikel on Artikel.PartNr = Buchungen.PartNr
GROUP BY PartNr, Bezeichnung
ORDER BY PartNr

CG2003 23. Feb 2006 22:32

Re: Frage/Probleme bei SELECT über zwei Tabellen
 
Hallo,

vielen Dank für die schnelle Antwort.

Ich habe folgendes bei phpmyadmin eingegeben:

SQL-Code:
SELECT Buchungen.PartNr, Parts.PartBezeichnung, COUNT(*) FROM Buchungen WHERE PartDatum BETWEEN '26.09.2005' AND '30.09.2005' AND PartStatus = 'Abbuchung';
LEFT OUTER JOIN Parts on Parts.PartNr = Buchungen.PartNr;
GROUP BY PartNr, Bezeichnung;
ORDER BY PartNr;
Wobei "Buchungen" meine Buchungstabelle ist, und "Parts" meine Artikeltabelle.
Nun, damit erhalte ich folgende Fehlermeldung:

"#1109 - Unknown table 'Parts' in field list ".

Habe ich was falsch gemacht???!!!


Wenn ich alles so eintrage:

SQL-Code:
SELECT Buchungen.PartNr, Parts.PartBezeichnung, COUNT(*) FROM Buchungen WHERE PartDatum BETWEEN '26.09.2005' AND '30.09.2005' AND PartStatus = 'Abbuchung'
LEFT OUTER JOIN Parts on Parts.PartNr = Buchungen.PartNr
GROUP BY PartNr, Bezeichnung
ORDER BY PartNr
(also ohne Dezimalkommas), erhalte ich einen Syntaxfehler.

Union 23. Feb 2006 22:38

Re: Frage/Probleme bei SELECT über zwei Tabellen
 
Schau mal unter http://dev.mysql.com/doc/refman/5.0/en/join.html nach.

CG2003 23. Feb 2006 22:47

Re: Frage/Probleme bei SELECT über zwei Tabellen
 
Zitat:

Zitat von Union

Danke, ich habe es mir angesehen, aber irgendwie steige ich da leider nicht durch... :wall:

GuenterS 23. Feb 2006 23:34

Re: Frage/Probleme bei SELECT über zwei Tabellen
 
SQL-Code:
SELECT Buchungen.PartNr, Parts.PartBezeichnung, COUNT(*) FROM Buchungen
LEFT OUTER JOIN Parts on Parts.PartNr = Buchungen.PartNr
GROUP BY Buchungen.PartNr, Parts.PartBezeichnung
HAVING PartDatum BETWEEN '26.09.2005' AND '30.09.2005' AND PartStatus = 'Abbuchung'
ORDER BY Buchungen.PartNr
Ich kenn mich bei mysql nicht so aus, aber probier das mal. Wenn ich beim SQL Server was groupiere brauche ich eigentlich alle Spalten vom Select auch in der group by klausel. Einschränken würde dann mit Having gehen, wenn ich mich recht erinner. Kann das grad nicht testen.

Frank Borland 24. Feb 2006 06:10

Re: Frage/Probleme bei SELECT über zwei Tabellen
 
Moin, moin,
irgendwer kann keine ANSI- SQL- konformes Statement auflösen. Entweder Zeos, eher aber MySQL: "The { OJ ... LEFT OUTER JOIN ...} syntax shown in the preceding list exists only for compatibility with ODBC". Naja, der Jim Starkey von Interbase ist ja unterwegs um aus dem Ding eine ordentliche DB zu machen :lol:


SQL-Code:
SELECT B.PartNr, P.PartBezeichnung, COUNT(*) FROM Buchungen B, Parts P
WHERE
B.PartDatum BETWEEN '26.09.2005' AND '30.09.2005'
AND
B.PartStatus = 'Abbuchung'
and
P.PartNr = B.PartNr
GROUP BY B.PartNr, P.PartBezeichnung
ORDER BY B.PartNr
Wirklich Sorgen sollte Dir eigentlich die Datumabfrage machen. Hier würde ich immer Parameter verwenden um den lokalen Einstellungen zu entgehen.

Gruß


Malte

Jelly 24. Feb 2006 07:26

Re: Frage/Probleme bei SELECT über zwei Tabellen
 
Zitat:

Zitat von Frank Borland
Wirklich Sorgen sollte Dir eigentlich die Datumabfrage machen. Hier würde ich immer Parameter verwenden um den lokalen Einstellungen zu entgehen.

Immer problemlos bei MySQL ist die Darstellung im yyyymmdd Format,
also:
SQL-Code:
...WHERE PartDatum BETWEEN '20050926' AND '20050930' AND...

CG2003 24. Feb 2006 08:19

Re: Frage/Probleme bei SELECT über zwei Tabellen
 
Zitat:

Zitat von Frank Borland
Moin, moin,
irgendwer kann keine ANSI- SQL- konformes Statement auflösen. Entweder Zeos, eher aber MySQL: "The { OJ ... LEFT OUTER JOIN ...} syntax shown in the preceding list exists only for compatibility with ODBC". Naja, der Jim Starkey von Interbase ist ja unterwegs um aus dem Ding eine ordentliche DB zu machen :lol:


SQL-Code:
SELECT B.PartNr, P.PartBezeichnung, COUNT(*) FROM Buchungen B, Parts P
WHERE
B.PartDatum BETWEEN '26.09.2005' AND '30.09.2005'
AND
B.PartStatus = 'Abbuchung'
and
P.PartNr = B.PartNr
GROUP BY B.PartNr, P.PartBezeichnung
ORDER BY B.PartNr
Wirklich Sorgen sollte Dir eigentlich die Datumabfrage machen. Hier würde ich immer Parameter verwenden um den lokalen Einstellungen zu entgehen.

Gruß


Malte

Danke, das scheint zu funktionieren. Die Datumsangaben werde ich dann über Parameter machen, wenn ihr meint es ist besser so. Muss ich da noch zusätzlöich was beachten?

Frank Borland 24. Feb 2006 08:29

Re: Frage/Probleme bei SELECT über zwei Tabellen
 
Zweckmäßigerweise solltest Du alle Abfragen in einer SQL- Console / Abfragetool testen. Dabei kannst Du auch gleich den Indexplan überprüfen, den die DB anbietet und ggf. die DB oder die Abfrage anpassen. Ganz nebenbei sparst Du Dir den Weg durch Dein Programm bis die Abfrage steht :zwinker:

Gruß


Malte


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 Uhr.

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