phpbar.de logo

Mailinglisten-Archive

[php] OT MySQL: Globale Werte bei Subquery und JOIN ON

[php] OT MySQL: Globale Werte bei Subquery und JOIN ON

Sebastian Mendel lists at sebastianmendel.de
Fre Feb 29 11:06:38 CET 2008


Michael Borchers schrieb:
>> Michael Borchers schrieb:
>>> Ich habe zwei Querys, die im Grunde dasselbe tun, nur anders geschrieben 
>>> sind.
>>> Beide verwenden eine Subquery. Eine davon einen JOIN, und genau diese 
>>> funktioniert auch nicht.
>>>
>>> Meldung:
>>> Unknown column 'b.benefits_id' in 'on clause'
>>>
>>> Das verwundert mich, denn in der Schreibweise der 1. Query ist 
>>> b.benefits_id bekannt,
>>> und das obwohl beide Varianten in einer Subquery darauf zugreifen.
>>>
>>> Ich vermute also, dass eine Variable aus der Ursprungstabelle (hier 
>>> benefits->benefits_id)
>>> global in einer Subquery verfügbar ist, sofern sie nicht in einem JOIN ON 
>>> ( ) steht.
>>> Ist das richtig? Ist ja irgendwie traurig:(
>> es könnte aber auch daran liegen das das JOIN zu einem früheren Zeitpunkt
>> ausgeführt wird als das WHERE, die Bedingung benötigt ja den Aktuellen
>> Datensatz aus dem 'parent', dieser liegt aber vielleicht beim JOINen noch
>> nicht vor da das vielleicht passiert bevor die Daten aus der Tabelle 
>> geholt
>> werden, und das WHERE erst dann ausgeführt/überprüft wird
>>
>> -- 
>> Sebastian
> 
> Ergo kann man es nur über die erste Schreibweise lösen?

naja, ich würde es wohl eher so machen:

SELECT
     benefits.benefits_id,
     SUM(time_sheets.time_sheets_time)
  AS benefits_time_sheets
FROM
     benefits
LEFT JOIN
     time_sheets_benefits
  ON time_sheets_benefits.benefits_id
   = benefits.benefits_id
LEFT JOIN
     time_sheets
  ON time_sheets.time_sheets_id
   = time_sheets_benefits.time_sheets_id
GROUP BY
     benefits.benefits_id

(wenn ich den Sinn deiner Abfrage richtig verstanden habe)

bzw, brauchst du eventuell die erste Tabelle gar nicht:

SELECT
     time_sheets_benefits.benefits_id,
     SUM(time_sheets.time_sheets_time)
  AS benefits_time_sheets
FROM
     time_sheets_benefits
LEFT JOIN
     time_sheets
  ON time_sheets.time_sheets_id
   = time_sheets_benefits.time_sheets_id
GROUP BY
     time_sheets_benefits.benefits_id


-- 
Sebastian

php::bar PHP Wiki   -   Listenarchive