【问题标题】:Apex Oracle Sql顶点 Oracle Sql
【发布时间】:2021-12-22 12:43:11
【问题描述】:

嗨,我是 sql 新手,仍在努力学习,有人可以指出我的错误在哪里 所以这是相同的代码写了两次,用一个别名引用元素(选择 *.....) 另一个没有它。第一个代码工作正常,而另一个给我“缺少表达式”错误,我知道这样写并不理想,但我看不出缺少的表达式在哪里?

第一个代码

select *
from (select * from dept) d  left outer join (select * from emp where job = 'SALESMAN') e
on e.deptno=d.deptno

第二个代码

select *
from (select * from dept)  left outer join (select * from emp where job = 'SALESMAN') 
on (select * from emp where job = 'SALESMAN').deptno=(select * from dept).deptno

【问题讨论】:

    标签: sql oracle oracle-apex


    【解决方案1】:

    我的错误在哪里,所以这是相同的代码写了两次,用一个别名引用元素(选择 *.....),另一个没有它。

    这正是你的错误。您不能将整个子查询用作...别名 (?)(不知道如何命名您所做的 construct)。


    不过,我们通常写得更简单

    select *
    from dept d left join emp e on e.deptno = d.deptno
                               and e.job = 'SALESMAN';
    

    【讨论】:

    • 我并没有尝试将其用作别名,我只是为了了解 sql 的工作原理而尝试引用它,但无论如何我可以给子查询一个别名,我做到了第一个代码和一切工作正常,如果你想知道为什么我什至在这里使用子查询,我不应该它只是为了学习的目的,以防我想在每个查询中添加一些条件,比如 (where,and)一张桌子。
    • 但是在你的代码中等待你给表格一个别名,然后立即开始使用 and 而不使用 where 可以这样做,而且我看到你确实设置了条件job='SALESMAN' 在 from 元素之外,同时仍将其引用到您想要的位置,哪个是 dept d 的别名也可以吗?
    • 好的,试一试SQL没问题,随意组合它。这样做,你会学到很多东西——你能做什么,你不能做什么,你能做什么但不能产生正确的结果等等。截至您的第二条评论:您所说的“条件”(and e.job = 'SALESMAN'不是条件;条件将被放入 WHERE 子句中。在我的示例中,这是 join 的一部分;我只是把它放到一个新行中以提高可读性。
    • hmmmm 所以 sql 不允许我引用整个子查询,因此我必须给它一个别名?而关于我的第二条评论并没有在我的第二个子查询中完成 where 的工作?
    • 如您所见,不 - 它不允许您这样做。截至第二条评论:运行我发布的查询,将其与您的第一个查询(有效)进行比较。然后修改我的查询,而不是 AND 放置 WHERE,即select * from dept d left join emp e on e.deptno = d.deptno WHERE e.job = 'SALESMAN';,你会看到会发生什么(查询会起作用,但也会返回错误的结果)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2021-04-01
    • 1970-01-01
    • 2020-01-11
    • 2012-09-25
    • 2016-12-07
    相关资源
    最近更新 更多