У меня есть следующий SQL:левой присоединиться к MySQL не дает мне ожидаемый результат
SELECT t.teilnehmer_id, t.familienname, t.vorname, t.ort, t.ortsteil, t.kontrolle_ertrag, t.kontrolle_1j, t.kontrolle_brache,
SUM(fe.nutzflaeche) AS nutzflaeche_ertrag, GROUP_CONCAT(fe.nutzflaeche) AS einzelfl_ertrag,
SUM(fp.nutzflaeche) AS nutzflaeche_pflanzj, GROUP_CONCAT(fp.nutzflaeche) AS einzelfl_pflanzj,
SUM(fb.nutzflaeche) AS nutzflaeche_brache, GROUP_CONCAT(fb.nutzflaeche) AS einzelfl_brache,
SUM(fn.nutzflaeche) AS nutzflaeche_nicht_aush, GROUP_CONCAT(fn.nutzflaeche) AS einzelfl_nicht_aush
FROM teilnehmer t
LEFT JOIN anrede a ON (t.anrede_id = a.anrede_id)
LEFT JOIN antragsform af ON (t.antragsform_id = af.antragsform_id)
LEFT JOIN bank b ON (t.bank_id = b.bank_id)
LEFT JOIN flurverzeichnis fe ON (t.teilnehmer_id = fe.teilnehmer_id AND fe.kulturbez = 'E')
LEFT JOIN flurverzeichnis fp ON (t.teilnehmer_id = fp.teilnehmer_id AND fp.kulturbez = 'P')
LEFT JOIN flurverzeichnis fb ON (t.teilnehmer_id = fb.teilnehmer_id AND fb.kulturbez = 'B')
LEFT JOIN flurverzeichnis fn ON (t.teilnehmer_id = fn.teilnehmer_id AND fn.kulturbez = 'N')
WHERE 1 = 1
GROUP BY t.teilnehmer_id
ORDER BY familienname, vorname
сумма не отражает правильные области, если есть совпадение более чем в одном kulturbez. Например. если у меня есть 5 строк с kulturbez 'E' и 2 строки с kulturbez 'N', каждая строка 'E' появляется дважды, и каждая строка 'N' появляется в 5 раз. Любые предложения о том, как переделать SQL, чтобы суммировать каждую строку с подходящим kulturbez один раз? Спасибо,
Гюнтер
Чтобы решить эту проблему, вам нужно будет объединять таблицы * перед тем * Выполнение 'join'. Так вы избегаете декартовского продукта. –
Практически каждый раз, когда у вас есть взаимозависимые отношения 1: N, ваши совокупные вычисления должны выполняться в подзапросах. – Uueerdo
Так работает 'LEFT JOIN', вы должны получить 2x5 записей в результирующем наборе. –