Sql 怎样做正确的外接?

Sql 怎样做正确的外接?,sql,join,outer-join,Sql,Join,Outer Join,我正在使用OE模式,试图查看每个仓库中的项目和现有数量,如果任何仓库没有项目,则应显示0个项目。我正在运行以下SQL,它没有显示项目的0数量 select i.product_id,w.warehouse_name ,(i.quantity_on_hand) from inventories i right outer join warehouses w on (i.warehouse_id=w.warehouse_id) order by 1 我希望看到这样的结果: PRODUCT_ID W

我正在使用OE模式,试图查看每个仓库中的项目和现有数量,如果任何仓库没有项目,则应显示0个项目。我正在运行以下SQL,它没有显示项目的0数量

select i.product_id,w.warehouse_name ,(i.quantity_on_hand)
from inventories i
right outer join warehouses w
on (i.warehouse_id=w.warehouse_id)
order by 1
我希望看到这样的结果:

PRODUCT_ID WAREHOUSE_NAME                      NVL(I.QUANTITY_ON_HAND,0)
---------- ----------------------------------- -------------------------
  2262 Sydney                                                     35
  2262 Beijing                                                    50
  2262 Bombay                                                     35
  2262 San Francisco                                             155
  2262 Seattle, Washington                                        77
       Toronto                                                     0
       New Jersey                                                  0
       Southlake, Texas                                            0
       Mexico City                                                 0
  3501 Toronto                                                   220
  3501 Sydney                                                    320
  3501 Mexico City                                               294
  3501 Beijing                                                   268
  3501 San Francisco                                             353
       New Jersey                                                  0
       Southlake, Texas                                            0
       Seattle, Washington                                         0
       Bombay                                                      0

您希望看到每个仓库和每个产品的一行。因此,从生成此列表开始,使用left outer join引入存在的值:

select i.product_id, w.warehouse_name, coalesce(i.quantity_on_hand, 0)
from warehouses w cross join
     (select distinct product_id from inventories) p left join
     inventories i
     on w.warehouse_id = i.warehouse_id and p.product_id = i.product_id
order by i.product_id, w.warehouse_name;

最好不用叫喊就解决,这似乎是SQL的东西;-从stackoverflow中选择;有趣的是,正文中的查询是小写的。。。