2014-11-03 58 views
-1

我有這樣的Oracle查詢:如何使用where子句中的多個參數將Oracle轉換爲MS SQL?

SELECT company, structure_id, team_code 
    FROM structure_main_tab 
    WHERE (company, parent_structure_id, team_code) 
    IN (SELECT company, structure_id, team_code 
     FROM structure_main_tab 
     WHERE (company, parent_structure_id, team_code) 
     IN (SELECT company, structure_id, team_code 
      FROM company_user_tab 
      WHERE UPPER(fusername) = UPPER('xxx') AND fdeleted = 'N' 
     ) 
    ); 

我想這個Oracle查詢轉換爲SQL Server查詢。

任何人都可以幫助我嗎?

+0

你必須把它寫成單獨的'WHERE'用'和'子句之間。在附註上:第一個子查詢使用與主查詢相同的表,是否正確? – NickyvV 2014-11-03 08:45:30

+0

認爲你不能在Sql Server中爲IN使用多列。你可以看看2'EXISTS'子句而不是IN。 – 2014-11-03 08:46:39

+0

代碼有什麼問題? – 2014-11-03 08:47:07

回答

1

認爲你不能使用多列SQL Server中的IN子句。

我將取代由存在子句和聯接

SELECT company, structure_id, team_code 
    FROM structure_main_tab smt 
    WHERE EXISTS (select null from 
       structure_main_tab smt1 
       join company_user_tab cut on cut.company = smt1.company and 
               cut.structure_id = smt1.parent_structure_id and 
               cut.team_code = smt1.team_code 
       where UPPER(cut.fusername) = UPPER('xxx') AND cut.fdeleted = 'N' 
       and smt.company = smt1.company 
       and smt.parent_structure_id = smt1.structure_id 
       and smt.team_code = smt1.team_code) 
+0

這解決了我的問題......非常感謝raph! :d – Yoga 2014-11-03 08:57:18

1

試試下面的查詢:

 SELECT company, structure_id, team_code into #temp1 
     FROM company_user_tab 
     WHERE UPPER(fusername) = UPPER('xxx') AND fdeleted = 'N' 





     SELECT company, structure_id, team_code 
     FROM structure_main_tab Mt inner join #temp1 tt 
     on Mt.company=tt.company and mt.parent_structure_id=tt.structure_id 
     and mt.team_code=tt.team_code 
+0

謝謝@Navneet! :) – Yoga 2014-11-03 08:56:21

相關問題