2013-06-03 92 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