2016-09-22 73 views
0

当我运行此查询,它的工作原理:添加子查询别名结果:SQL命令不能正确地结束

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; 

然而,当我跑这一次,我得到的SQL命令无法正常结束错误。请注意,唯一的区别是我给了子查询alias'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%' 
     ) **sq1** 
    group by id1 
    order by count(*) desc; 

我需要弄清楚这一点,因为我试图加入到子查询中,因此需要'on'子句的别名。

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

+4

您试图将别名列表而非派生表或列 – Matt

+0

您的查询中没有连接子句 – Amit

+0

您只能为派生表定义别名,而不能为子查询 –

回答

0

正如我和其他人在评论中提到的问题是,你试图别名,而不是派生的表或列。

觉得你的代码是这样的:

​​

是一样的话说:

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作为答案... ...

+0

Matt , 谢谢。这是非常有用的,特别是将它看作IN()子句。真的很感谢患者的回答。 –

+0

@SethAKelley很高兴能够帮助,如果我的答案满足您的问题,如果您可以标记为答案会很好。它可以让其他人知道你的问题已经解决,并奖励声望点。谢谢。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Matt

相关问题