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'