mysql 中的相关查询出错
Error in coorelated query in mysql
当我运行跟随查询时,一切正常,但 LEFT JOIN 中的子查询失败并且
SELECT inv.*,rc.*,po.*,cfd.*
FROM invoice_lineitem as inv
LEFT JOIN (
SELECT rc1.* FROM rentalcode as rc1 WHERE rc1.assetCategory=
(SELECT AssetCategory FROM assetmaster WHERE
AssetID=invoice_lineitem.asset_typeID)
AND invoice_lineitem.invoice_date between rc1.start_date
AND rc1.validity_date
) rc ON rc.email=inv.usernameID
LEFT OUTER JOIN purchase_order as po ON (po.PO_ID=inv.poNumber)
LEFT OUTER JOIN client_facility_data as cfd ON (cfd.email=inv.usernameID)
WHERE inv.contractID='2/1AS/10'
我收到错误
1054 - Unknown column 'invoice_lineitem.asset_typeID' in 'where
clause'
当我通过从 SubQuery 中删除所有 invoice_lineitem 并将其放在 WHERE(contractID 旁边)来尝试相同的查询时,查询有效但它的行为类似于 INNER JOIN 查询,即如果任何查询失败我在哪里没有数据
SELECT inv.*,rc.*,po.*,cfd.*
FROM invoice_lineitem as inv
LEFT JOIN (
SELECT rc1.* FROM rentalcode as rc1
) rc ON rc.email=inv.usernameID
LEFT OUTER JOIN purchase_order as po ON (po.PO_ID=inv.poNumber)
LEFT OUTER JOIN client_facility_data as cfd ON (cfd.email=inv.usernameID)
WHERE inv.contractID='2/1AS/10' AND rc.assetCategory=(SELECT AssetCategory FROM assetmaster WHERE AssetID=inv.asset_typeID)
AND inv.invoice_date between rc.start_date and rc.validity_date
子查询不能引用外部查询中的表(如果可以,您将不得不使用 inv.
别名)。
试试这个。我将子查询更改为另一个 LEFT JOIN
.
SELECT inv.*,rc.*,po.*,cfd.*
FROM invoice_lineitem as inv
LEFT JOIN rentalcode AS rc1
ON rc.email = inv.usernameID
AND inv.nvoice_date between rc1.start_date AND rc1.validity_date
LEFT JOIN assetmaster AS am
ON rc1.assetCategory = am.AssetCategory
AND inv.asset_typeID = am.AssetID
LEFT OUTER JOIN purchase_order as po ON (po.PO_ID=inv.poNumber)
LEFT OUTER JOIN client_facility_data as cfd ON (cfd.email=inv.usernameID)
WHERE inv.contractID='2/1AS/10'
当我运行跟随查询时,一切正常,但 LEFT JOIN 中的子查询失败并且
SELECT inv.*,rc.*,po.*,cfd.*
FROM invoice_lineitem as inv
LEFT JOIN (
SELECT rc1.* FROM rentalcode as rc1 WHERE rc1.assetCategory=
(SELECT AssetCategory FROM assetmaster WHERE
AssetID=invoice_lineitem.asset_typeID)
AND invoice_lineitem.invoice_date between rc1.start_date
AND rc1.validity_date
) rc ON rc.email=inv.usernameID
LEFT OUTER JOIN purchase_order as po ON (po.PO_ID=inv.poNumber)
LEFT OUTER JOIN client_facility_data as cfd ON (cfd.email=inv.usernameID)
WHERE inv.contractID='2/1AS/10'
我收到错误
1054 - Unknown column 'invoice_lineitem.asset_typeID' in 'where clause'
当我通过从 SubQuery 中删除所有 invoice_lineitem 并将其放在 WHERE(contractID 旁边)来尝试相同的查询时,查询有效但它的行为类似于 INNER JOIN 查询,即如果任何查询失败我在哪里没有数据
SELECT inv.*,rc.*,po.*,cfd.*
FROM invoice_lineitem as inv
LEFT JOIN (
SELECT rc1.* FROM rentalcode as rc1
) rc ON rc.email=inv.usernameID
LEFT OUTER JOIN purchase_order as po ON (po.PO_ID=inv.poNumber)
LEFT OUTER JOIN client_facility_data as cfd ON (cfd.email=inv.usernameID)
WHERE inv.contractID='2/1AS/10' AND rc.assetCategory=(SELECT AssetCategory FROM assetmaster WHERE AssetID=inv.asset_typeID)
AND inv.invoice_date between rc.start_date and rc.validity_date
子查询不能引用外部查询中的表(如果可以,您将不得不使用 inv.
别名)。
试试这个。我将子查询更改为另一个 LEFT JOIN
.
SELECT inv.*,rc.*,po.*,cfd.*
FROM invoice_lineitem as inv
LEFT JOIN rentalcode AS rc1
ON rc.email = inv.usernameID
AND inv.nvoice_date between rc1.start_date AND rc1.validity_date
LEFT JOIN assetmaster AS am
ON rc1.assetCategory = am.AssetCategory
AND inv.asset_typeID = am.AssetID
LEFT OUTER JOIN purchase_order as po ON (po.PO_ID=inv.poNumber)
LEFT OUTER JOIN client_facility_data as cfd ON (cfd.email=inv.usernameID)
WHERE inv.contractID='2/1AS/10'