Left Outer使用不执行oracle的子查询加入

时间:2016-01-02 16:30:30

标签: sql database oracle

我正在尝试查询包含左外连接和包含子查询的查询。我尝试了以下代码:

select c.CustomerName,l.Way,l.Travel
from (select l.HomeAdd from tbl_Location l
where l.HomeAdd like '%Colombo%') from
tbl_Customer c left outer join tbl_Location l
on (l.location_id=c.location_id);

我收到以下错误消息

tbl_Customer c left outer join tbl_Location l
         *
ERROR at line 4:
ORA-00933: SQL command not properly ended

请帮助!!!

3 个答案:

答案 0 :(得分:4)

非常奇怪的查询。我假设你打算:

select c.CustomerName, l.Way, l.Travel
from tbl_Customer c left outer join
     tbl_Location l
     on l.location_id = c.location_id and l.HomeAdd like 'Colombo%';

查询的问题是您在where子句中有子查询。没有比较 - 不是=,没有exists,没有in,没有任何代表布尔表达式。

答案 1 :(得分:2)

看起来您在查询中缺少EXISTS关键字

select c.CustomerName,l.Way,l.Travel
from tbl_Customer c left outer join tbl_Location l
on (l.location_id=c.location_id)
where EXISTS (
  select l.HomeAdd from tbl_Location l
  where l.HomeAdd like 'Colombo%'
);

答案 2 :(得分:1)

如果您坚持使用子查询,我建议您执行以下操作:

select c.CustomerName,
       l.Way,
       l.Travel
from tbl_Customer c
left outer join (SELECT l.HOMEADD,
                        l.WAY,
                        l.TRAVEL
                 FROM tbl_Location
                 WHERE l.HOMEADD LIKE 'Colombo%') l
  on l.location_id=c.location_id

另外,评论:我强烈建议您不要在表格等名称前加上“TBL_”之类的内容。当使用表等时,用法的上下文会告诉您对象是什么。 Oracle标识符限制为30个字符 - IMO将可用名称长度的13%视为前缀,这简直就是浪费。

祝你好运。