2011-08-16 23 views
1

我應該將我的數據庫從MySQL遷移到oracle, 我的問題是我的問題不再起作用!我應該保持相同的格式(化名champ1,champ2)SQL語句錯誤,當我嘗試將其從MySQL遷移到Oracle

,這是我的SQL語句:

select count(j.id) as nb, p.pname as champ1,proj.pname as champ2 
from jiraissue j 
join priority p on (p.id=j.priority) 
join project proj on(proj.id=j.project) 
join issuestatus iss on (iss.id=j.issuestatus) 
join issuetype isst on(isst.id=j.issuetype) 
where j.CREATED between '2011-05-18 00:00:00.0' and '2011-06-05 00:00:00.0' 
and iss.pname='Open' 
group by champ1,champ2; 

錯誤:

ORA-00904: "CHAMP2" : identificateur non valide 
00904. 00000 - "%s: invalid identifier" 

PS:當我刪除GROUPBY和別名選擇並執行錯誤也會出現,表明日期格式無效

ORA-01861: le littéral ne concorde pas avec le format chaîne de caractères 
+1

'group by p.name,proj.name'。 MySQL很有禮貌,可以讓你在查詢的其他地方使用字段別名。其他數據庫不太好。 –

回答

3

對於整體大量的原因,SQL的大多數實現不允許你在查詢的SELECT部分​​使用別名GROUP BY。

select count(j.id) as nb, p.pname as champ1,proj.pname as champ2 
from jiraissue j 
join priority p on (p.id=j.priority) 
join project proj on(proj.id=j.project) 
join issuestatus iss on (iss.id=j.issuestatus) 
join issuetype isst on(isst.id=j.issuetype) 
where 
    j.CREATED between '2011 May 18' and '2011 June 05' 
    and iss.pname='Open' 
group by 
    p.pname, 
    proj.pname 
; 


編輯 - 跟進評論:

我不確定爲什麼上面的回答完全不是那麼回事幫助你,也許你不想重複自己在碼? (你通過別名分組獲得的東西,並因此在其他每個rdbms中丟失)如果是這樣,以下模式可能會有所幫助...

SELECT 
    COUNT(j_id) AS nb, champ1, champ2 
FROM 
(
    select j.id AS j_id, p.pname as champ1, proj.pname as champ2 
    from jiraissue j 
    join priority p on (p.id=j.priority) 
    join project proj on(proj.id=j.project) 
    join issuestatus iss on (iss.id=j.issuestatus) 
    join issuetype isst on(isst.id=j.issuetype) 
    where 
    j.CREATED between '2011 May 18' and '2011 June 05' 
    and iss.pname='Open' 
) 
    AS data 
GROUP BY 
    champ1, 
    champ2 
; 
+0

謝謝你的回覆,但這對我來說是個巨大的問題,因爲一個漏洞應用程序基於這樣的查詢! – rym

+0

你只需要做我在答案中所做的事情,以及Marc B在評論中發佈的內容;源數據中存在的GROUP BY字段(或字段上的計算)。 – MatBailie