2013-10-25 3 views
0

Я просто не могу понять, что не так с этим синтаксисом. Я получаю синтаксическую ошибку # 1064 на последней строке.Другая ошибка синтаксиса 1064

SELECT b.id, b.lastname, b.name, c.balance, a.maxdebt, b.warndata, b.warndownload, b.warnupload, b.warndebt, b.cutoffdata, b.cutoffdownload, b.cutoffupload, b.cutoffdebt, b.data, b.download, b.upload, b.warning, b.access, b.cutoffstop 
FROM (
SELECT customers.id AS id, SUM(tariffs.value) AS maxdebt 
      FROM tariffs 
      INNER JOIN assignments ON tariffs.id = assignments.tariffid 
      INNER JOIN customers ON assignments.customerid = customers.id 
      GROUP BY id 
) a 
LEFT JOIN (
SELECT customers.id AS id, UPPER(lastname) AS lastname, customers.name AS name, SUM(stats.upload+stats.download) AS data, SUM(stats.download) AS download, SUM(stats.upload) AS upload, cutoffstop, warndata, warndownload, warnupload, warndebt, cutoffdata, cutoffdownload, cutoffupload, cutoffdebt, warning, access 
     FROM customers 
     LEFT JOIN nodes ON customers.id = nodes.ownerid 
     LEFT JOIN stats ON nodes.id = stats.nodeid 
     LEFT JOIN customerwarnings ON customers.id = customerwarnings.id 
    GROUP BY id 
) b 
LEFT JOIN (
SELECT customerid, SUM(cash.value) AS balance 
     FROM cash 
     GROUP BY customerid 
) c ON a.id = b.id = c.customerid 

Я попытался соединить таблицы с направо и налево JOINS, чтобы увидеть, если есть разница, но они дают мне ту же ошибку. Различные запросы в рамках работы отлично работают на себя, но когда я присоединяюсь к ним вместе в этом запросе, я получаю синтаксическую ошибку. Кто-нибудь есть идея, что я должен или не должен делать?

ошибка: «# 1064 - У Вас есть ошибка в вашем синтаксисе SQL, проверьте руководство, которое соответствует Вашей версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с„“в строке 21»

+1

Я думаю, что в подзапросе 'b' вам нужно изменить' GROUP BY' потому что вы используете агрегацию 'SUM' но выбрать несколько столбцов, чем' GROUP BY' – JScoobyCed

ответ

0

Вот ссылка для Multiple LEFT JOIN

SELECT b.id, b.lastname, b.name, c.balance, a.maxdebt, b.warndata, b.warndownload, b.warnupload, b.warndebt, b.cutoffdata, b.cutoffdownload, b.cutoffupload, b.cutoffdebt, b.data, b.download, b.upload, b.warning, b.access, b.cutoffstop 
FROM (
SELECT customers.id AS id, SUM(tariffs.value) AS maxdebt 
      FROM tariffs 
      INNER JOIN assignments ON tariffs.id = assignments.tariffid 
      INNER JOIN customers ON assignments.customerid = customers.id 
      GROUP BY id 
) a 
LEFT JOIN (
SELECT customers.id AS id, UPPER(lastname) AS lastname, customers.name AS name, SUM(stats.upload+stats.download) AS data, SUM(stats.download) AS download, SUM(stats.upload) AS upload, customers.cutoffstop, warndata, warndownload, warnupload, warndebt, cutoffdata, cutoffdownload, cutoffupload, cutoffdebt, nodes.warning, nodes.access 
     FROM customers 
     LEFT JOIN nodes ON customers.id = nodes.ownerid 
     LEFT JOIN stats ON nodes.id = stats.nodeid 
     LEFT JOIN customerwarnings ON customers.id = customerwarnings.id 
    GROUP BY id 
) b ON a.id = b.id 
LEFT JOIN (
SELECT customerid, SUM(cash.value) AS balance 
     FROM cash 
     GROUP BY customerid 
) c ON a.id = c.customerid 
+0

Ах большое! Этот второй вариант действительно сработал. Мне интересно, почему на самом деле? Если вы хотите немного объяснить? – user2886735

+0

@ user2886735 он называется multijoin. здесь немного больше разъяснений здесь http://stackoverflow.com/questions/2366780/how-to-do-an-inner-join-on-multiple-columns/2366820#2366820 –

+0

@ user2886735 присоединение производится по столбцам, где используя предложение ON. :) –

Смежные вопросы