MySQL объединяет только выбранные строки - PullRequest
1 голос
/ 03 апреля 2011
SELECT invoices.number_formatted, SUM(invoices_elements.netto)
FROM invoices
LEFT JOIN invoices_elements ON invoices_elements_code_invoices_id = invoices_id
WHERE invoices_enable = 1
AND invoices_elements_enable = 1
GROUP BY invoices_elements_code_invoices_id

Если в таблице "invoices_elements" нет строк с "invoices_elements_enable = 1", этот запрос возвращает значение NULL, но я хочу "форматирование числа". Итак, я делаю это:

SELECT SUM(netto)
FROM (invoices)
LEFT JOIN (SELECT * FROM invoices_elements WHERE invoices_elements_enable = 1) ON invoices_elements_code_invoices_id = invoices_id
WHERE invoices_enable = 1
GROUP BY invoices_elements_code_invoices_id

... и это потому что работает. Но - лучший способ сделать это?

1 Ответ

2 голосов
/ 03 апреля 2011

Вы можете сделать

SELECT SUM(netto)
FROM   invoices
       LEFT JOIN invoices_elements
         ON invoices_elements_code_invoices_id = invoices_id
            AND invoices_elements_enable = 1
WHERE  invoices_enable = 1
GROUP  BY invoices_elements_code_invoices_id  

Обратите внимание, что ограничение invoices_elements_enable = 1 содержится в предложении ON, чтобы избежать преобразования запроса в inner join.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...