Mailinglisten-Archive |
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