AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Komplizierte SELECT Abfrage...
Thema durchsuchen
Ansicht
Themen-Optionen

Komplizierte SELECT Abfrage...

Ein Thema von sniper_w · begonnen am 23. Feb 2008 · letzter Beitrag vom 23. Feb 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#1

Komplizierte SELECT Abfrage...

  Alt 23. Feb 2008, 12:19
Datenbank: mysql • Version: 5 • Zugriff über: zeos
Hi,
Ich habe folgende 2 Tabellen:
1: parents
id (int), name (varchar) , gender (int), ....
2: children
id (int), parent_id (int), name(varchar), gender (int), ...

Jetzt wollte ich eine SELECT Abfrage machen, deren Resultat inetwa so aussehen sollte:

parents.id, parents.name....

wo nur "parents" die ein "child" haben da sind und die noch dazu noch männlich sind...

gender = 1 = männlich


select * from parents where gender = 1 and ???
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Komplizierte SELECT Abfrage...

  Alt 23. Feb 2008, 12:22
Grob aus dem Kopf:

SQL-Code:
SELECT p.id, p.name FROM parents p
LEFT JOIN children c
    ON c.parent_id = p.id
WHERE p.gender = 1
GROUP BY p.parent_id
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Komplizierte SELECT Abfrage...

  Alt 23. Feb 2008, 12:57
Zitat von sniper_w:
wo nur "parents" die ein "child" haben da sind und die noch dazu noch männlich sind...
Meinst du mir EIN Kind genau eins oder mindestens eins ?

Um alle Eltern zu bekommen mit mindestens einem Kind, ist die Formulierung von Matze nicht ganz korrekt... Er hat auf die falsche Seite gejoined.

SQL-Code:
SELECT p.parent_id, p.name, count(c.child_id) as BubCount FROM parents p
RIGHT OUTER JOIN children c
    ON c.parent_id = p.parent_id
WHERE p.gender = 1
GROUP BY p.parent_id, p.name
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Komplizierte SELECT Abfrage...

  Alt 23. Feb 2008, 13:01
Zitat:
Meinst du mir EIN Kind genau eins oder mindestens eins ?
Es tut mir leid, das habe ich vergessen. Es sollte mindestens ein Kind vorhanden sein.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Komplizierte SELECT Abfrage...

  Alt 23. Feb 2008, 13:04
Die ganze Joinerei mach ich jedesmal falsch. Daher auch "grob". *g*
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Komplizierte SELECT Abfrage...

  Alt 23. Feb 2008, 13:06
Zitat von Matze:
Die ganze Joinerei mach ich jedesmal falsch. Daher auch "grob". *g*
Ist ja im Grunde nicht so schwer, man muss sich nur einmal dran gewöhnen... Lustig wirds nur wenns mehrere Tabellen sind, und da inner joins, left joins und full joins gemischt werden. Da muss man höllisch aufpassen (keine outer joins vor inner joins)

@sniper: Du müsstest ja dann jetzt eine Lösung haben... Funktioniert sie?
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Komplizierte SELECT Abfrage...

  Alt 23. Feb 2008, 13:14
Ja es funktioniert...ich teste es immernoch, aber es schient zu funktionieren.
Vielen Dank.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

Re: Komplizierte SELECT Abfrage...

  Alt 23. Feb 2008, 13:20
Das müsste aber doch auch mit einem INNER JOIN gehen, oder irre ich mich?
SQL-Code:
SELECT p.id, p.name, COUNT(*)
FROM parents p
JOIN children c ON c.parent_id = p.id
WHERE c.gender = 1
GROUP BY p.id, p.name
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 sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Komplizierte SELECT Abfrage...

  Alt 23. Feb 2008, 13:26
Ich brauche eigentlich
WHERE [b]p[/b].gender = 1 aber dein Vorschlag funktioniert auch!

PS: Warum werden beide Felder "gegroupt"

GROUP BY p.id, p.name Sollte es eigentlich nicht nur ein ausreichen.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

Re: Komplizierte SELECT Abfrage...

  Alt 23. Feb 2008, 13:41
Wenn Du Aggregatfunktionen benutzt (hier COUNT), müssen alle Nicht-Aggregatfelder in die Gruppierung.
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
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 01:25 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