添加子查询别名结果:SQL命令未正确结束

时间:2016-09-22 22:01:16

标签: sql oracle subquery alias

当我运行此查询时,它可以工作:

%hive
add jar /home/hadoop/jsonserde.jar

然而,当我运行这个时,我得到的SQL命令没有正确结束错误。请注意,唯一的区别是我给了子查询别名' sq1'。

select id1, count(*) from id_table
    where id2 = 'X' and id1 in
        (
       select numA from num_table where numB = 'Y' and numC like '%Z%'
        )
    group by id1
    order by count(*) desc;

我需要弄明白这一点,因为我试图加入一个子查询,因此需要一个别名来进行' on'子句。

有人可以解释为什么添加子查询别名会触发此错误吗?

1 个答案:

答案 0 :(得分:0)

正如我和其他人在评论中提到的那样,问题在于你试图为派生表或列之外的其他东西设置别名。

想想你的代码:

WHRE id1 IN (SELECT numA FROM num_table) sql

与说法相同:

WHERE id1 IN (1,2,3,4) sql

这看起来不对,sql会出现什么样的别名? id1 IN (1,2,3,4)的结果基本上是boolean of true or false,它不是在查询的另一部分中引用的对象。

如果您将查询编写为连接,则实际上可以对表进行别名。

select
    t.id1
    ,count(DISTINCT t.id1)
from
    id_table t
    INNER JOIN num_table sq1
    ON t.id1 = sq1.numA
    AND numB = 'Y'
    and numC like '%Z%'
where t.id2 = 'X'
group by id1
order by count(DISTINCT t.id1) desc;

或者作为派生表

select
    t.id1
    ,count(*)
from
    id_table t
    INNER JOIN (SELECT DISTINCT numA
             FROM
                num_table
             WHERE
                numB = 'Y'
                and numC like '%Z%'
             ) sq1
    ON t.id1 = sq1.numA
where t.id2 = 'X'
group by id1
order by count(*) desc;

如果id_table.id1是唯一的,这两个查询和你正在尝试OP的那个查询都会给你ID,1作为答案.......