AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Denkanstoss bei Verschachtelter MySQL Abfrage
Thema durchsuchen
Ansicht
Themen-Optionen

Denkanstoss bei Verschachtelter MySQL Abfrage

Ein Thema von SlaterBenelli · begonnen am 21. Okt 2009 · letzter Beitrag vom 22. Okt 2009
Antwort Antwort
SlaterBenelli

Registriert seit: 4. Feb 2008
Ort: Frankfurt am Main
33 Beiträge
 
Delphi 2007 Professional
 
#1

Denkanstoss bei Verschachtelter MySQL Abfrage

  Alt 21. Okt 2009, 16:14
Datenbank: MySQL • Version: 5 • Zugriff über: Zeos
Hallo Zusammen,

irgendwie steh ich gerade voll auf dem Schlauch und weis nicht wie ich wo googeln kann...

Ich habe eine Abfrage die mir ständig falsche Daten liefert, aber nur weil da ein "OR" drinn vorkommt, da ich in einer Unterabfrage mehrere Felder aus einer Tabelle als eine "Tabelle" Abfragen will und die in der vorherigen Abfrage brauche.

SQL-Code:
SELECT *
FROM gsreports.daten
where (datum >= "2009-10-12" and datum <= "2009-10-18") and
  (vdn = any (select gsreports.geschaeftsstellen.VDN_Bonn_Intern
        from gsreports.geschaeftsstellen
        where
        VBID = (select gsreports.vbs.ID
        from gsreports.vbs
        where VB = 'West'))) or
  (vdn = any (select gsreports.geschaeftsstellen.VDN_local_Intern
        from gsreports.geschaeftsstellen
        where
        VBID = (select gsreports.vbs.ID
        from gsreports.vbs
        where VB = 'West')))
order by datum, VDN, zeit
in der Tabelle Geschaeftsstellen habe ich zwei spalten die ich beide Abfragen will aber so klappt das irgendwie nicht.

Habe mir schon überlegt das ich das ganze evtl. über eine "Hilfstabelle" lösen will, aber wenn mehr als ein Anwender die Abfrage macht, dann wäre unter Umständen ja schon die Hilfstabelle von jemandem anderen genutzt und mit Daten gefüllt...

Wie kann ich das am gescheitesten Verknüpfen?
Christian
D2007 Pro geschäftlich D7 personal privat
  Mit Zitat antworten Zitat
SlaterBenelli

Registriert seit: 4. Feb 2008
Ort: Frankfurt am Main
33 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Denkanstoss bei Verschachtelter MySQL Abfrage

  Alt 21. Okt 2009, 16:49
Ok,

ich habe da jetzt was gefunden und ausprobiert auf meine DB, aber ich bin mir nicht sicher ob dieser Code evtl. irgendwo doch noch hakt und mir nur momentan die richtigen Werte ausspuckt. Momentan sind noch nicht so viele Datensätze in der DB enthalten....

SQL-Code:
SELECT *
FROM gsreports.daten
where
  (vdn = any (select gsreports.geschaeftsstellen.VDN_Bonn_Intern
        from gsreports.geschaeftsstellen
        where
        VBID = (select gsreports.vbs.ID
        from gsreports.vbs
        where VB = 'West')) or
  vdn = any (select gsreports.geschaeftsstellen.VDN_local_Intern
        from gsreports.geschaeftsstellen
        where
        VBID = (select gsreports.vbs.ID
        from gsreports.vbs
        where VB = 'West')))

AND
  datum >= "2009-10-12" and datum <= "2009-10-18" and
    Zeit >= "00:00:00" and Zeit <= "23:59:00"


order by datum, VDN, zeit
Vielleicht gibt es ja hier den einen oder anderen MySQL Spezialisten....
Christian
D2007 Pro geschäftlich D7 personal privat
  Mit Zitat antworten Zitat
SlaterBenelli

Registriert seit: 4. Feb 2008
Ort: Frankfurt am Main
33 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Denkanstoss bei Verschachtelter MySQL Abfrage

  Alt 21. Okt 2009, 16:52
ok, das wird wohl die richtige lösung sein... wenn ich den alten Code mit mehreren Klammern noch erweitere liefert der mir die gleichen (richtigen) Werte... Sch... Klammern


SQL-Code:
SELECT *
FROM gsreports.daten
where (datum >= "2009-10-12" and datum <= "2009-10-18") and
  ((vdn = any (select gsreports.geschaeftsstellen.VDN_Bonn_Intern
        from gsreports.geschaeftsstellen
        where
        VBID = (select gsreports.vbs.ID
        from gsreports.vbs
        where VB = 'West'))) or
  (vdn = any (select gsreports.geschaeftsstellen.VDN_local_Intern
        from gsreports.geschaeftsstellen
        where
        VBID = (select gsreports.vbs.ID
        from gsreports.vbs
        where VB = 'West'))))
order by datum, VDN, zeit
Christian
D2007 Pro geschäftlich D7 personal privat
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Denkanstoss bei Verschachtelter MySQL Abfrage

  Alt 21. Okt 2009, 17:02
Ich weiß nicht genau, ob ich Deine Abfrage richtig verstanden habe, aber kommt hierbei das erwartete Ergebnis?
SQL-Code:
SELECT D.*
FROM gsreports.daten D
JOIN gsreports.geschaeftsstellen G
  ON (G.VDN_Bonn_Intern = D.vdn) OR (G.VDN_local_Intern = D.vdn)
JOIN gsreports.vbs V
  ON V.ID = G.VBID
WHERE V.VB = 'West'
AND D.datum BETWEEN "2009-10-12" AND "2009-10-18"
AND D.Zeit BETWEEN "00:00:00" AND "23:59:00"
ORDER BY D.datum, D.VDN, D.zeit
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
SlaterBenelli

Registriert seit: 4. Feb 2008
Ort: Frankfurt am Main
33 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Denkanstoss bei Verschachtelter MySQL Abfrage

  Alt 22. Okt 2009, 08:47
Hi...

@ DeddyH: Ja, das beinhaltet genau die Daten die ich brauchte...

ok, aber was ist der Vorteil bei einer Abfrage wie du sie gemacht hast im vergleich zu meiner die nach den zusätzlichen Klammern auch funktioniert hatte (Deine sieht wesentlich eleganter aus, keine Frage!)?

Gruß

Christian
Christian
D2007 Pro geschäftlich D7 personal privat
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Denkanstoss bei Verschachtelter MySQL Abfrage

  Alt 22. Okt 2009, 12:19
Nun, der erste und entscheidende Vorteil ist, dass das Statement leichter zu lesen und zu begreifen ist. Zum 2. können damit auch ältere MySQL-Versionen vor 4.1 umgehen, die noch keine Sub-Selects unterstützen. Und möglicherweise ist es auch ein wenig performanter, aber das ist reine Spekulation, da ich nicht weiß, wie gut MySQL solche Abfragen wie Deine optimieren kann.
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


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 13:11 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