2016-09-22 69 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

相關問題