![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: Zeos
Denkanstoss bei Verschachtelter MySQL Abfrage
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:
in der Tabelle Geschaeftsstellen habe ich zwei spalten die ich beide Abfragen will aber so klappt das irgendwie nicht.
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 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? |
Re: Denkanstoss bei Verschachtelter MySQL Abfrage
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:
Vielleicht gibt es ja hier den einen oder anderen MySQL Spezialisten....
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 |
Re: Denkanstoss bei Verschachtelter MySQL Abfrage
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 |
Re: Denkanstoss bei Verschachtelter MySQL Abfrage
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 |
Re: Denkanstoss bei Verschachtelter MySQL Abfrage
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 |
Re: Denkanstoss bei Verschachtelter MySQL Abfrage
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 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-2025 by Thomas Breitkreuz