У меня есть запрос с объединениями и подзапросом (производная таблица). Если я запустил его без LIMIT 1, результат будет содержать поле vat и id с соответствующими значениями.mysql left join subquery with limit дает поля с нулевыми значениями для родительского select
Первый запрос:
SELECT i.id, i.vat, pl.invoice_id as inv_id, pl.product_id as pl_id, pl.quantity as qty, pl.price, pl.currency, p.name, p.manufacturer, p.list_price, p.cost_price, p.wholesale_price, p.cikkszam, p.unit, p.group_name
FROM soulnsoda_products_log pl
LEFT JOIN soulnsoda_products p ON pl.product_id=p.id
LEFT JOIN (select id, vat, parent_id, beneficiary_account from soulnsoda_invoices) as i ON i.parent_id>0 AND pl.invoice_id=i.parent_id AND pl.product_id=i.beneficiary_account
WHERE pl.action=6 AND p.cikkszam = 'S6511415-BLK' AND (pl.stamp BETWEEN '2015-08-15 00:00:00' AND '2015-08-15 23:59:59') AND pl.warehouse_name='Garage - Árkád'
ORDER BY p.cikkszam
Результат будет содержать i.id и i.vat поля со значениями, но дублирующие строки:
id vat inv_id pl_id qty price name
93119 27.00 93117 21961 -1.00 1096.85 HUF SUPRA ICON SX BLACK DB
93120 27.00 93117 21961 -1.00 1096.85 HUF SUPRA ICON SX BLACK DB
93119 27.00 93117 21961 -1.00 1096.85 HUF SUPRA ICON SX BLACK DB
93120 27.00 93117 21961 -1.00 1096.85 HUF SUPRA ICON SX BLACK DB
я должен отфильтровать строки с дублируется идентификаторы. Когда я использую LIMIT 1, дублирование исчезнет, но поле id и vat будет NULL. И я не знаю, почему ...
Второй запрос с LIMIT:
SELECT i.id, i.vat, pl.invoice_id as inv_id, pl.product_id as pl_id, pl.quantity as qty, pl.price, pl.currency, p.name, p.manufacturer, p.list_price, p.cost_price, p.wholesale_price, p.cikkszam, p.unit, p.group_name
FROM soulnsoda_products_log pl
LEFT JOIN soulnsoda_products p ON pl.product_id=p.id
LEFT JOIN (select id, vat, parent_id, beneficiary_account from soulnsoda_invoices LIMIT 1) as i ON i.parent_id>0 AND pl.invoice_id=i.parent_id AND pl.product_id=i.beneficiary_account
WHERE pl.action=6 AND p.cikkszam = 'S6511415-BLK' AND (pl.stamp BETWEEN '2015-08-15 00:00:00' AND '2015-08-15 23:59:59') AND pl.warehouse_name='Garage - Árkád'
ORDER BY p.cikkszam
Результат будет две строки, которые в порядке, но нет идентификатор и чан:
id vat inv_id pl_id qty price name
NULL NULL 93117 21961 -1.00 1096.85 HUF SUPRA ICON SX BLACK DB
NULL NULL 93117 21961 -1.00 1096.85 HUF SUPRA ICON SX BLACK DB
Я пробовал LIMIT 1, GROUP BY, MIN, MAX и т. Д.
Я знаю, что DISTINCT работает с моим образцом, но это упрощенный запрос, чтобы показать вам проблему.
Как добиться результата только двумя строками, но со значением в столбце id и vat, используя некоторую технику в (или около) подзапросе LEFT JOIN?
нуль находится на правом столе, а не на левом. поэтому используйте 'is null 'или' is not null' – Drew
Спасибо, но нулевой результат, к сожалению. Поэтому я не мог с этим справиться. – Tamas