1

こんにちは、手順に問題があります

ストアド プロシージャ:

SELECT dbo.Table1.*,
       CAST (CASE WHEN Table1.Id IS IN ( SELECT Id 
                                         FROM dbo.Table2 
                                         WHERE RefRolleId =@Id) 
              THEN 0 ELSE 1 END AS bit) AS selected
FROM   dbo.Table1

エラー: IN-Keyword 付近の間違った構文 THEN-Keyword 付近の間違った構文

私はグーグルで検索しましたが、IN演算子を使用したケースの例が見つかりませんでした.誰かが間違っていることを教えてください

どんなアドバイスでも大歓迎です

4

2 に答える 2

2

削除するだけで機能しますISこれは質問に直接答えるだけで、他には何もありません(パフォーマンスの向上など)

SELECT dbo.Table1.*,
       CAST (CASE WHEN Table1.Id  IN ( SELECT Id 
                                         FROM dbo.Table2 
                                         WHERE RefRolleId =@Id) 
              THEN 0 ELSE 1 END AS bit) AS selected
FROM   dbo.Table1
于 2013-01-22T14:15:31.640 に答える
2

@JW は正しいですが、クエリを次のように変更することをお勧めします。

SELECT DISTINCT T.*,
       CAST (CASE 
                WHEN T2.Id IS NOT NULL
                THEN 0 
                ELSE 1 
             END AS bit) AS selected
FROM   dbo.Table1 T
   LEFT JOIN dbo.Table2 T2 ON T.Id = T2.Id AND T2.RefRolleId =@Id

これにより、パフォーマンスが向上する可能性があると思います。

幸運を。

于 2013-01-22T14:19:25.283 に答える