Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL Probleme mit einem Left Join (https://www.delphipraxis.net/198226-mysql-probleme-mit-einem-left-join.html)

Hobbycoder 15. Okt 2018 16:42

Datenbank: MySQL • Version: 5.6 • Zugriff über: UniDAC

MySQL Probleme mit einem Left Join
 
Hi,

ich habe ein Problem mit einem SQL-Statement.

Code:
Select e.*, count(b.guid) as bilder from ersatzfzg as e left join bilder as b on e.kennzeichen=b.kennzeichen where e.betriebguid='{D30C179A-E8D8-41B5-937E-82DE8F55072C}' and e.aktiv=1 order by e.ID
Soll alle Felder der Tabelle "ersatzfzg", und zusätzlich ein Feld mit der Anzahl hinterlegter Bilder aus der Tabelle "bilder", liefern.
Die Tabelle "ersatzfzg" umfasst 9 Datensätze (alle im Feld "aktiv" = 1).
In der Tabelle Bilder sind 2 Datensätze.

Wenn nun keines der Kennzeichen in Tabelle "bilder" gefunden wird, wird lediglich der 1. Datensatz zurück geliefert.
Wenn ich einen Datensatz in "erstazfzg" hinzufügen, wo dann das Kennzeichen zu denen in der Tabelle "bilder" passt, wird nur dieser neue Datensatz zurückgeliefert.

Benötigen würde ich jedoch alle Datensätze aus der Tabelle "ersatzfzg" wo aktiv=1 ist und die betriebguid passt, und halt wenn keine Datensätze in der Tabelle "bilder" gefunden werden, dann halt eine 0 geliefert wird.
So wie ich left join verstanden habe, sollte das so eigentlich funktionieren. Oder macht man das anders?

mkinzler 15. Okt 2018 16:51

AW: MySQL Probleme mit einem Left Join
 
SQL-Code:
Select
  e.*, bilder
from
  ersatzfzg as e
    left join ( select e.kennzeichen, count( bguid) as bilder from bilder group by kennzeichen ) b on e.kennzeichen=b.kennzeichen
where
  e.betriebguid='{D30C179A-E8D8-41B5-937E-82DE8F55072C}' and
  e.aktiv=1 
 order by
   e.ID;

Hobbycoder 15. Okt 2018 17:01

AW: MySQL Probleme mit einem Left Join
 
Danke.

Kann man sagen, dass deine Lösung mit dieser
SQL-Code:
Select e.*,
  (Select Count(ID) from bilder where kennzeichen=e.kennzeichen) as Count
from ersatzfzg as e
where e.betriebguid='{D30C179A-E8D8-41B5-937E-82DE8F55072C}' and e.aktiv=1 
order by e.ID
identische Ergebnisse liefert?

mkinzler 15. Okt 2018 17:04

AW: MySQL Probleme mit einem Left Join
 
Sollte ja. Die eine Lösung halt über SubQuery die andere als deferred table.

Hobbycoder 15. Okt 2018 17:33

AW: MySQL Probleme mit einem Left Join
 
Danke für die Erleuchtung :idea: ;-)


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