簡體   English   中英

別名不在內連接中工作

[英]Alias not working in inner join

我試圖給表facturation和內連接中的表成員一個別名,所以我可以在select中的子查詢中使用它像這樣

    SELECT description,
       Avg((SELECT Count(*)
            FROM   facturation F
            WHERE  F.membreid = M.membreid))
FROM   v_type_membre
       INNER JOIN v_membre M
               ON v_type_membre.typeid = M.typeid
       INNER JOIN v_facturation
               ON M.membreid = v_facturation.membreid
GROUP  BY description
ORDER  BY description; 

為什么我會收到錯誤:

Error at Command Line:3 Column:31
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:

謝謝

你原來的問題是別名周圍的引號。 你不需要它們。

同樣,您不需要相關子查詢。 您可以將查詢編寫為:

select description, avg(cnt*1.0) as avg_cnt
FROM v_type_membre INNER JOIN v_membre M
     ON v_type_membre.typeid = M.typeid INNER JOIN
     v_facturation
     ON M.membreid = v_facturation.membreid inner join
     (SELECT f.membreid, Count(*) as cnt
      FROM facturation F
      group by F.membreid
     ) cnt
     on cnt.membreid = M.membreid
GROUP  BY description
ORDER  BY description;  

除了更清晰 - 對某些人來說 - 這也可以讓你包括最小值和最大值,或者計算值為10和42的次數,如果你願意的話。

我還添加了一個“* 1.0”來將計數轉換為浮點數。 在某些數據庫中,整數的平均值是整數,這可能不是您想要的。 Oracle正確地做了平均值,但我習慣這樣做。

嘗試將子選擇移動到連接(我不認為你需要v_facturation連接,我需要更多的信息(我猜v_ *是一個視圖),以確保。);

SELECT description, Avg(F.fact_cnt)
FROM   v_type_membre
       INNER JOIN v_membre AS M
               ON v_type_membre.typeid = M.typeid
--       INNER JOIN v_facturation
--               ON M.membreid = v_facturation.membreid
       INNER JOIN (SELECT membreid, Count(*) 'fact_cnt'
            FROM   facturation group by membreid) AS F
            ON  F.membreid = M.membreid
GROUP  BY description
ORDER  BY description;

(對不起,沒有Oracle或任何其他目前可用的數據庫,這都是在我腦海中解析和編譯的......)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM