2013-06-03 89 views
0

這裏是我的sql代碼。ORACLE ALIAS在WHERE子句子查詢

我使用子查詢和拉布勒的它。但是,當我打算從子查詢調用列的顯示,如無效的標識符

SELECT TSR.Merchant_id, denomination, SUM (no_of_cards) 
    FROM sales_details 
    WHERE invoice_id IN (
      SELECT invoice_id 
       FROM sales_header TSR 
      WHERE entered_by = (
         (SELECT account_code 
         FROM bk_dsr_account_codes 
         WHERE user_name = 'C' 
          AND PASSWORD = 'D' 
          AND mobile_no = '8994035090213391259')) 
       AND entered_date BETWEEN (TO_DATE ('2013/04/01', 'yyyy/mm/dd') 
             ) 
            AND (TO_DATE ('2013/06/30', 'yyyy/mm/dd') 
             )) 
GROUP BY denomination 

誤差按如下

ORA-00904: "TSR"."MERCHANT_ID": invalid identifier 

請幫我來解決這個問題 我還需要在我的最終sql視圖中調用子查詢的列

+0

你不」 t需要這些嵌套的子查詢。您的查詢可能只是表格之間的連接。 –

回答

3

您只能使用中的colums 0子句。所以,你的查詢應該是這樣的:

SELECT TSR.Merchant_id, SD.denomination, SUM (SD.no_of_cards) 
    FROM sales_details SD 
    JOIN sales_header TSR on SD.invoice_od = TSR.invoice_id 
WHERE entered_by = (
        (SELECT account_code 
        FROM bk_dsr_account_codes 
        WHERE user_name = 'C' 
         AND PASSWORD = 'D' 
         AND mobile_no = '8994035090213391259')) 
      AND entered_date BETWEEN (TO_DATE ('2013/04/01', 'yyyy/mm/dd') 
            ) 
           AND (TO_DATE ('2013/06/30', 'yyyy/mm/dd') 
            ) 
GROUP BY SD.denomination 
+0

+1比我更快,別名更好。你可能想在組中做'denomination' =>'SD.denomination'也是安全的。 –

+0

編輯回覆Joachim Isaksson添加評論 –

1
select * from table1, table2 where table1.userid=x and table2.sdsd=x 

select * from table1 t1, table2 t2 where t1.userid=x and t2.sdsd=x 

相同的輸出上面這2 ...

試試這個

SELECT TSR.Merchant_id, denomination, SUM (no_of_cards) 
    FROM sales_details,TSR 
    WHERE invoice_id IN (
      SELECT invoice_id 
       FROM sales_header TSR 
      WHERE entered_by = (
         (SELECT account_code 
         FROM bk_dsr_account_codes 
         WHERE user_name = 'C' 
          AND PASSWORD = 'D' 
          AND mobile_no = '8994035090213391259')) 
       AND entered_date BETWEEN (TO_DATE ('2013/04/01', 'yyyy/mm/dd') 
             ) 
            AND (TO_DATE ('2013/06/30', 'yyyy/mm/dd') 
             )) 
GROUP BY denomination