【问题标题】:How to print values from nested query in the main select query?如何在主选择查询中打印嵌套查询的值?
【发布时间】:2014-05-25 07:48:01
【问题描述】:

我有 3 张桌子。一个是行程表并连接到许可证号表,该表连接到表员工。我的内心选择是:

SELECT  TR.L#, TR.REG# , COUNT(TR.REG#)
FROM TRIP TR
GROUP BY TR.L#, TR.REG#

正在给我许可证号和卡车注册号以及该卡车的每个许可证的行程次数。现在我需要添加另一个表中的许可证号信息。如何将这三列转移到主选择并将它们打印在员工姓名旁边?

   SELECT  E.FNAME, E.LNAME
    FROM EMPLOYEE E
    WHERE E.E# IN (
            SELECT E#
            FROM DRIVER
            WHERE L# IN (
                        SELECT  TR.L#, TR.REG# , COUNT(TR.REG#)
                         FROM TRIP TR
                    GROUP BY TR.L#, TR.REG#
            )
    );

错误:

值太多

尝试加入:

SELECT   TR.L#, TR.REG# , COUNT(TR.REG#), D.E#  
FROM TRIP TR
INNER JOIN DRIVER D ON D.L# = TR.L#
GROUP BY TR.L#, TR.REG#

【问题讨论】:

  • 是的,但我收到错误:不是按表达式分组
  • 是的,我看到了。解决办法是什么?

标签: mysql sql oracle oracle11g


【解决方案1】:

我认为编写查询是最简单的,以便连接的顺序与关系相匹配,就好像数据从旅行通过司机流向员工一样,沿着这些线:

select tr.l#, tr.reg#, d.e#, count(1) trips
from trip tr
join driver d on (d.l# = tr.l#)
join employee e on (e.e# = d.e#)
group by tr.l#, tr.reg#, d.e#

【讨论】:

    【解决方案2】:
    SELECT  E.FNAME, E.LNAME, sub.<DRIVER FIELD NAME>
    FROM EMPLOYEE E JOIN (
                SELECT *
                FROM DRIVER
                WHERE L# IN (
                            SELECT  TR.L#, TR.REG# , COUNT(TR.REG#)
                             FROM TRIP TR
                        GROUP BY TR.L#, TR.REG#
                ) 
        ) sub ON E.E#=sub.E#
    

    【讨论】:

    • 第 1 行出现错误:ORA-01747:user.table.column、table.column 或列规范无效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2013-01-19
    • 1970-01-01
    • 2022-11-03
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多