Sql from子句中的子查询,Where子句中的标识符无效

Sql from子句中的子查询,Where子句中的标识符无效,sql,oracle,Sql,Oracle,我试图选择数据,但where子句指出“dp.active”是无效标识符。这可能是因为表dp位于子查询中。我在浏览stackoverflow时找到了一个别名和一些其他东西,但我似乎找不到解决办法。有什么想法吗 这是Oracle PL/SQL。在子查询中检查active=1,如下所示 select * from iiasa_inventory.inv_device d join iiasa_inventory.inv_type ty on

我试图选择数据,但where子句指出“dp.active”是无效标识符。这可能是因为表dp位于子查询中。我在浏览stackoverflow时找到了一个别名和一些其他东西,但我似乎找不到解决办法。有什么想法吗


这是Oracle PL/SQL。

在子查询中检查
active=1
,如下所示

select * from iiasa_inventory.inv_device    d                         
  join iiasa_inventory.inv_type ty on d.type_id = ty.id
  join iiasa_inventory.inv_category c on ty.category_id = c.id
  join iiasa_inventory.inv_device_2_barcode b on b.device_id = d.id
  join iiasa_inventory.inv_barcodes bc on b.barcode_id = bc.id
  join iiasa_inventory.inv_status s on d.status = s.id
  join iiasa_inventory.inv_brand br on ty.brand_id = br.id
  left join iiasa_inventory.inv_supplier su on su.id = d.supplier_id
  left join iiasa_inventory.inv_supplier sup on sup.id = d.maintenance_with
  left join (select distinct device_id from 
  iiasa_inventory.inv_device_2_persons_cc) dp
  on dp.device_id = d.id 
  where dp.active = 1

这是因为您没有在dp中选择
active

select * from iiasa_inventory.inv_device    d                         
                                  join iiasa_inventory.inv_type ty on d.type_id = ty.id
                                  join iiasa_inventory.inv_category c on ty.category_id = c.id
                                  join iiasa_inventory.inv_device_2_barcode b on b.device_id = d.id
                                  join iiasa_inventory.inv_barcodes bc on b.barcode_id = bc.id
                                  join iiasa_inventory.inv_status s on d.status = s.id
                                  join iiasa_inventory.inv_brand br on ty.brand_id = br.id
                                  left join iiasa_inventory.inv_supplier su on su.id = d.supplier_id
                                  left join iiasa_inventory.inv_supplier sup on sup.id = d.maintenance_with
                                  left join (select distinct device_id from iiasa_inventory.inv_device_2_persons_cc where active = 1) dp on dp.device_id = d.id 
您可以从子查询本身进行筛选。比如:

select * from iiasa_inventory.inv_device    d                         
  join iiasa_inventory.inv_type ty on d.type_id = ty.id
  join iiasa_inventory.inv_category c on ty.category_id = c.id
  join iiasa_inventory.inv_device_2_barcode b on b.device_id = d.id
  join iiasa_inventory.inv_barcodes bc on b.barcode_id = bc.id
  join iiasa_inventory.inv_status s on d.status = s.id
  join iiasa_inventory.inv_brand br on ty.brand_id = br.id
  left join iiasa_inventory.inv_supplier su on su.id = d.supplier_id
  left join iiasa_inventory.inv_supplier sup on sup.id = d.maintenance_with
  left join (select distinct device_id,active from iiasa_inventory.inv_device_2_persons_cc) dp on dp.device_id = d.id 
where dp.active = 1

您没有在子查询中查询
活动的
。哦,天哪,我怎么会错过这个。非常感谢,这是漫长的一天^^
left join (select distinct device_id 
        from iiasa_inventory.inv_device_2_persons_cc 
        where active=1) dp on dp.device_id = d.id