2014-10-30 64 views
-2
select count (*) from 
(select a.ACCOUNT_POID_ID0,a.STATUS as moov_profile_status,b.SUB_PLAN_ID,b.PLAN_ID,c.STATUS,c.NAME 
from VMS_MOOV_PROFILE_T a, 
VMS_SUB_PLAN_NO_REGEN_T b, 
VMS_VOUCHER_CONF_T c,  
where b.ACCOUNT_POID_ID0 = a.ACCOUNT_POID_ID0 
and c.VOUCHER_ID = (select f.VOUCHER_ID from VMS_PLAN_VOUCHER_T f where f.PLAN_ID = b.PLAN_ID)); 

這將返回一個錯誤。我如何計算行數?計算別名表的行數

+0

派生表'FROM(SELECT ...)提供一個別名x' – StuartLC 2014-10-30 09:11:07

+0

**什麼RDBMS你使用的是什麼錯誤?我猜你的問題是什麼,但是當你完成了大部分的單詞,而不是試圖寫出整個單詞時,我不是100%確定的。 – Ben 2014-10-30 09:12:10

+0

P.S. 'VMS_VOUCHER_CONF_T c'後有一個不正確的逗號,這可能是問題所在。 – Ben 2014-10-30 09:12:33

回答

1
Try this 

SELECT count (*) 
FROM (SELECT a.ACCOUNT_POID_ID0, 
       a.STATUS AS moov_profile_status, 
       b.SUB_PLAN_ID, 
       b.PLAN_ID, 
       c.STATUS, 
       c.NAME 
     FROM VMS_MOOV_PROFILE_T a, 
       VMS_SUB_PLAN_NO_REGEN_T b, 
       VMS_VOUCHER_CONF_T c 
     WHERE b.ACCOUNT_POID_ID0 = a.ACCOUNT_POID_ID0 
       AND c.VOUCHER_ID = (SELECT f.VOUCHER_ID 
            FROM VMS_PLAN_VOUCHER_T f 
            WHERE f.PLAN_ID = b.PLAN_ID)) t 
0

你的錯誤是:

  1. 你忘了告訴我們該錯誤信息是你得到了什麼。
  2. 你忘了告訴我們你正在使用什麼dbms。
  3. 有許多逗號(在表別名c後面)。
  4. 根據dbms,您可能還需要派生表的名稱(即在右括號後面添加一些虛擬名稱)。

修正查詢:

select count (*) from 
(
    select a.ACCOUNT_POID_ID0,a.STATUS as moov_profile_status,b.SUB_PLAN_ID,b.PLAN_ID,c.STATUS,c.NAME 
    from VMS_MOOV_PROFILE_T a, 
    VMS_SUB_PLAN_NO_REGEN_T b, 
    VMS_VOUCHER_CONF_T c 
    where b.ACCOUNT_POID_ID0 = a.ACCOUNT_POID_ID0 
    and c.VOUCHER_ID = (select f.VOUCHER_ID from VMS_PLAN_VOUCHER_T f where f.PLAN_ID = b.PLAN_ID) 
) dummy; 

而且你加入的表(使用VMS_PLAN_VOUCHER_T子查詢)的方式是有點怪。而且你不應該使用二十年前在標準SQL中替換的舊的逗號分隔連接語法。另外:無論如何你都不需要派生表。

這裏是你的查詢簡化爲:

select count (*) 
from VMS_MOOV_PROFILE_T a 
join VMS_SUB_PLAN_NO_REGEN_T b on b.ACCOUNT_POID_ID0 = a.ACCOUNT_POID_ID0 
join VMS_PLAN_VOUCHER_T f on f.PLAN_ID = b.PLAN_ID 
join VMS_VOUCHER_CONF_T c on c.VOUCHER_ID = f.VOUCHER_ID;