我有一個連接和子查詢(派生表)的查詢。如果我運行它沒有限制1,結果將包含增值稅和ID字段與正確的值。MySQL的左連接子查詢的限制給父母選擇空值的字段
第一個查詢:
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
我不得不過濾掉重複的行IDS。當我使用LIMIT 1時,重複將消失,但id和vat字段將爲NULL。我不知道爲什麼...
與限制第二查詢:
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和增值列中的值,使用一些技術在(或左右)LEFT JOIN子查詢?
null在右表不是左邊的一個。所以使用'是空'或'不爲空' – Drew
謝謝,但遺憾的是,結果爲空。所以我無法處理。 – Tamas