0

複数のテーブルで一意のIDを検索し、それが存在する場所に基づいてレベルを割り当てる必要があるシナリオがあります。

Table Hierarchy

        TableA
                TableB
                         TableC

テーブルBはテーブルAの主キーを保持し、テーブルCはテーブルBの主キーを保持します

Idをパラメーターとして受け取り、このテーブル階層とリターンレベルでそのIdを検索する関数が必要です。つまり、TableAレベルに存在する場合は1にする必要があります。TableBに存在する場合、レベルは2であり、TableCに存在する場合、レベルは3である必要があります。

4

3 に答える 3

3

これが1つの方法です:

SELECT CASE WHEN EXISTS(SELECT 1 FROM TableC WHERE id = @id) THEN '3'
            WHEN EXISTS(SELECT 1 FROM TableB WHERE id = @id) THEN '2'
            WHEN EXISTS(SELECT 1 FROM TableA WHERE id = @id) THEN 'One'
       END AS "Level"
于 2013-02-05T14:25:19.837 に答える
0

次のようなクエリが必要です。

SELECT 1 FROM TableA WHERE id = {0}
UNION ALL
SELECT 2 FROM TableB WHERE id = {0}
UNION ALL
SELECT 3 FROM TableC WHERE id = {0}

「WHEN」ステートメントに対するこれの利点は、a)WHENステートメントが好きではないこと、およびb)キーが複数のテーブルに存在する場合、それぞれのレコードを返すことです。これにより、その処理に関するプログラムロジックを構築する機会が得られます。場合。

于 2013-02-05T14:23:53.360 に答える
0

TableCの最高レベルである3を最高レベルに戻したいとすると、次のCASEステートメントを使用して次のように機能するはずです。

SELECT 
   CASE 
     WHEN C.Id IS NOT NULL THEN 3 
     WHEN B.Id IS NOT NULL THEN 2
     WHEN A.Id IS NOT NULL THEN 1
   END as Level 
FROM (SELECT @Id as Id) H
   LEFT JOIN TableA A ON H.Id = A.Id
   LEFT JOIN TableB B ON H.Id = B.Id
   LEFT JOIN TableC C ON H.Id = C.Id

ここで、@ Idは、検索する値のIDです。たとえば、IDとしてSELECT1を使用します。

幸運を。

于 2013-02-05T14:25:35.370 に答える