这是一个关于练习的问题,要求我写一个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
答案 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';
<强>参考强>: