0

結合とサブクエリ (派生テーブル) を含むクエリがあります。LIMIT 1 なしで実行すると、結果には vat と適切な値を持つ id フィールドが含まれます。

最初のクエリ:

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  

ID が重複している行を除外する必要があります。LIMIT 1 を使用している場合、重複はなくなりますが、id と vat フィールドは NULL になります。そして、私は理由を知りません...

LIMIT を使用した 2 番目のクエリ:

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

結果は 2 行になり、問題ありませんが、id と vat はありません。

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 が私のサンプルで機能していることはわかっていますが、これは問題自体を示す単純化されたクエリです。

LEFT JOIN サブクエリ (またはその周辺) で何らかの手法を使用して、id 列と vat 列の値を使用して、2 行のみで結果を得るにはどうすればよいですか?

4

2 に答える 2