2016-09-29 31 views
0

いくつかのint値を返す再帰的なSQLクエリがあります。 SQLクエリは以下のようになります。SQL - ";"の近くの構文が正しくありません。

;WITH GroupHIERARCHY(ID) 
    AS ( SELECT ID 
    FROM tFirstTable te 
    WHERE te.LevelID <> 0 
    AND GroupID =-1 
    UNION ALL 
    SELECT t.ElementID 
    FROM tFirstTable AS t, tSecondTable,GroupHIERARCHY 
    WHERE t.TypeID=tSecondTable.TypeID 
    AND GroupHIERARCHY.ID= t.GroupID) 

    SELECT ID FROM GroupHIERARCHY 

これは、いくつかの整数値を返します。 (ファインワークス)私が何をしたいのか は、私は以下のようなクエリを書きたいということです。

Select * from tExampleTable 
WHERE FirstParameter IN (IntegerValuesHere) OR SecondParameter IN (IntegerValuesHere) 

IntegerValuesHereは私が再帰クエリから取得した値です。

クエリは、今のようになります。

Select * FROM tExampleTable 
    WHERE FirstParameter IN (
     ;WITH GroupHIERARCHY(ID) 
     AS ( SELECT ID 
     FROM tFirstTable te 
     WHERE te.LevelID <> 0 
     AND GroupID =-1 
     UNION ALL 
     SELECT t.ElementID 
     FROM tFirstTable AS t, tSecondTable,GroupHIERARCHY 
     WHERE t.TypeID=tSecondTable.TypeID 
     AND GroupHIERARCHY.ID= t.GroupID) 

     SELECT ID FROM GroupHIERARCHY 
     ) 

    OR SecondParameter IN (
     ;WITH GroupHIERARCHY(ID) 
     AS ( SELECT ID 
     FROM tFirstTable te 
     WHERE te.LevelID <> 0 
     AND GroupID =-1 
     UNION ALL 
     SELECT t.ElementID 
     FROM tFirstTable AS t, tSecondTable,GroupHIERARCHY 
     WHERE t.TypeID=tSecondTable.TypeID 
     AND GroupHIERARCHY.ID= t.GroupID) 

     SELECT ID FROM GroupHIERARCHY 
    ) 

しかし、私はというエラーを取得している:

付近に正しくない構文 ';' WITHの前で;ため と 付近に正しくない構文 ')'

まず、。 第2に、)の場合は、ORより前です。 私は何が欠けていますか?

+1

WITHの前に、両方とも。 – jarlh

+0

@jarlhそれは問題を解決しません。 – eg16

+0

@jarlh削除後、WITHを選択することを期待して、近くでエラーが表示されます。 – eg16

答えて

6

あなたがしようとしているようにCTEをネストすることはできません。

;WITH GroupHIERARCHY(ID) 
    AS ( SELECT ID 
    FROM tFirstTable te 
    WHERE te.LevelID <> 0 
    AND GroupID =-1 
    UNION ALL 
    SELECT t.ElementID 
    FROM tFirstTable AS t, tSecondTable,GroupHIERARCHY 
    WHERE t.TypeID=tSecondTable.TypeID 
    AND GroupHIERARCHY.ID= t.GroupID)  
Select * 
from tExampleTable 
WHERE FirstParameter IN (SELECT ID FROM GroupHIERARCHY) OR 
     SecondParameter IN (SELECT ID FROM GroupHIERARCHY) 
+0

このCTEは別のCTE内にありますが、この場合はどうすればよいですか? – eg16

+3

@ eg16 '; With FirstCTE AS()、SecondCTE AS(SELECT * FROM FirstCTE JOIN ..)...'のように入れ子にすることができます。 –

0

このように別のデータを使用してください。

;WITH GroupHIERARCHY(ID) 
AS ( 

    SELECT ID 
    FROM tFirstTable te 
    WHERE te.LevelID <> 0 
    AND GroupID =-1 
    UNION ALL 
    SELECT t.ElementID 
    FROM tFirstTable AS t, tSecondTable,GroupHIERARCHY 
    WHERE t.TypeID=tSecondTable.TypeID 
    AND GroupHIERARCHY.ID= t.GroupID 
), 
GroupHIERARCHY1(ID) 
AS ( 

    SELECT ID 
    FROM tFirstTable te 
    WHERE te.LevelID <> 0 
    AND GroupID =-1 
    UNION ALL 
    SELECT t.ElementID 
    FROM tFirstTable AS t, tSecondTable,GroupHIERARCHY 
    WHERE t.TypeID=tSecondTable.TypeID 
    AND GroupHIERARCHY.ID= t.GroupID 

) 


SELECT ID FROM GroupHIERARCHY 
Select * FROM tExampleTable 
WHERE FirstParameter IN (
select Id from GroupHIERARCHY 
) 

OR SecondParameter IN (


SELECT ID FROM GroupHIERARCHY1 
) 
関連する問題