无法在oracle sql中查询连接

时间:2014-07-17 01:52:51

标签: sql oracle join

这是一个关于练习的问题,要求我写一个SQL语句来显示存储在由“Lucille Smith”管理的仓库中的所有项目的SKU,SKU_Description,WarehouseID。我必须使用连接,但不要使用JOIN ON语法。

我想出了:

   select sku, sku_description, warehouseid 
   from inventory join warehouse
   inventory.warehouseid = warehouse.warehouseid
   where manager = 'lucille smith';

出现以下错误

从命令行中的第3行开始出错 -

select Sku,SKU_DESCRIPTION,WAREHOUSEID 
from inventory join warehouse on
inventory.WAREHOUSEID = warehouse.warehouseid
      where manager = 'lucille smith'

命令行出错:3列:28 错误报告 -

SQL Error: ORA-00918: column ambiguously defined 00918. 00000 - "column ambiguously defined" *Cause: *Action:

如果它有助于我添加了表格仓库的图片:https://i.imgur.com/HJ6duOz.png 广告资源:https://i.imgur.com/FvPAKpf.png

5 个答案:

答案 0 :(得分:1)

ORA-00918告诉您ORACLE无法决定选择哪个列,因为两个表都有相同名称的列。

要解决这个问题,你需要使用这样的别名:

select alias1.common_column, alias2.common_column
select table1 alias1, table2 alias2

如果不允许使用JOIN ON,那么你可以使用旧样式语法,其中所有连接都在WHERE子句中完成。

答案 1 :(得分:0)

您应该为所有列使用表别名。这是猜测它们是什么:

   select i.sku, i.sku_description, w.warehouseid 
   from inventory i join
        warehouse w
        on i.warehouse = w.warehouseid
   where w.manager = 'lucille smith';

具体问题可能是由warehouseid中的select引起的。它可能来自任何一个表。

答案 2 :(得分:0)

如果你的问题是如何在不使用JOIN..ON的情况下连接表格,那么有两种可能的答案:

1)使用JOIN..USING,如约瑟夫B的回答所示

2)使用" old" Oracle语法。在FROM子句中列出要作为逗号分隔列表连接的表,并将连接条件放在WHERE子句中,例如:

SELECT t1.column1, t2.column2
FROM table1 t1, table2 t2
WHERE t1.join_column = t2.join_column

答案 3 :(得分:0)

你可以试试这个: -

SELECT I.sku, I.sku_description, W.warehouseid 
FROM INVENTORY I, WAREHOUSE W
WHERE I.warehouse = W.warehouseid
AND W.manager = 'lucille smith';

希望这会对你有所帮助,这是你想要的答案......

答案 4 :(得分:-1)

您可以使用JOIN..USING语法,如下所示:

修改: 将经理姓名更改为标题案例

   select sku, sku_description, warehouseid 
   from inventory i join warehouse w
   using (warehouseid)
   where manager = 'Lucille Smith';

<强>参考

JOINS IN ORACLE on DATAWAREHOUSE CONCEPTS blog