Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi [MySQL]Count über andere Tabelle als Feld in ein Select einbinden (https://www.delphipraxis.net/202818-%5Bmysql%5Dcount-ueber-andere-tabelle-als-feld-ein-select-einbinden.html)

Hobbycoder 11. Dez 2019 16:36

[MySQL]Count über andere Tabelle als Feld in ein Select einbinden
 
Hi,

ich brauche mal Gedankenanstöße zur Lösung einer SQL-Abfrage.
Ich habe 2 Tabelle. Tabelle 1 enthält einen Artikelstamm. Tabelle 2 enthält Artikel, welche über ID aus Artikelstamm identifiziert werden.

Jetzt brauche ich ein Select welches alle Datensätze und alle Felder aus Tabelle 1 selektiert plus ein Feld, welches die Anzahl der Datensätze mit der ID aus Tabelle 1 enthält.

Beispiel:

Tabelle 1:

Code:
ID | Name
---+-----
1  | abc
2  | def
Tabelle 2:

Code:
ID | RefID | Verwendungsort
---+-------+---------------
1  | 1     | Ort1
2  | 2     | Ort2
3  | 1     | Ort3
4  | 1     | Ort4
5  | 2     | Ort5
6  | 1     | Ort6
7  | 1     | Ort7
Das Ergebnis soll so aussehen:

Code:
ID | Name | Menge
---+------+------
1  | abc | 5
2  | def | 2
Quasi:
Code:
Select *, (Select Count(RefID) from tabelle2 group by RefID) from tabelle1
Nur wie schreibt man eine solche Abfrage in MySQL?

samso 11. Dez 2019 17:00

AW: [MySQL]Count über andere Tabelle als Feld in ein Select einbinden
 
Ich denke so sollte es gehen (ungetestet)
Code:
select tabelle1.*, Count(*) from tabelle2
left join tabelle1 on tabelle1.id=tabelle2.RefId
group by tabelle2.RefID

Hobbycoder 11. Dez 2019 18:01

AW: [MySQL]Count über andere Tabelle als Feld in ein Select einbinden
 
Im Prinzip schon, aber dann bekomme ich nur die, die in Tabelle 2 midestens einmal vorhanden sind. Ich müsste aber auch aus Tabelle 1 alle Datensätze bekommen, welche in Tabelle 2 nicht vorkommen (dann halt mit dem Count=0).

hhcm 11. Dez 2019 18:14

AW: [MySQL]Count über andere Tabelle als Feld in ein Select einbinden
 
z.B So.

Code:
SELECT
   tabelle1.ID,
   tabelle1.Name,
   (SELECT count(ID) FROM tabelle2 WHERE tabelle2.RefID = tabelle1.ID) as Menge
FROM tabelle1
oder so?

Code:
SELECT
      tabelle1.ID,
      tabelle1.Name,
      COUNT( tabelle2.ID ) as Menge
FROM tabelle1
LEFT JOIN tabelle2 ON tabelle1.ID = tabelle2.RefId
GROUP BY tabelle1.ID

jobo 11. Dez 2019 20:28

AW: [MySQL]Count über andere Tabelle als Feld in ein Select einbinden
 
Zitat:

Zitat von hhcm (Beitrag 1453288)
oder so? ..

2. Vorschlag könnte schneller sein.
Sicherheitshalber noch ein vollständiges Group by angeben:
Code:
SELECT
      tabelle1.ID,
      tabelle1.Name,
      COUNT( tabelle2.ID ) as Menge
 FROM tabelle1
 LEFT JOIN tabelle2 ON tabelle1.ID = tabelle2.RefId
GROUP BY tabelle1.ID, tabelle1.Name

TigerLilly 12. Dez 2019 08:06

AW: [MySQL]Count über andere Tabelle als Feld in ein Select einbinden
 
Code:
select a.*, (select Count(*) from tabelle2 as b where a.id=b.id) as anzahlb
from Tabelle1 as a

jobo 12. Dez 2019 08:22

AW: [MySQL]Count über andere Tabelle als Feld in ein Select einbinden
 
Zitat:

Zitat von TigerLilly (Beitrag 1453331)
select a.*, (select Count(*) from tabelle2 as b where a.id=b.id) as anzahlb from Tabelle1 as a

gab's schon in #4.

TigerLilly 12. Dez 2019 08:25

AW: [MySQL]Count über andere Tabelle als Feld in ein Select einbinden
 
Ja, da hast du recht - sorry, da hab ich nicht genau genug gelesen. #4 war schenller. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:28 Uhr.

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