0

我有一个场景,我需要在多个表中搜索唯一 id 并根据它存在的位置分配一个级别。

Table Hierarchy

        TableA
                TableB
                         TableC

表 B 保存表 A 的主键,表 C 保存表 B 的主键

我需要有一个以Id 作为参数并在此表层次结构和返回级别中搜索该ID 的函数,即如果它存在于TableA 中,级别应该是一个。如果它存在于 TableB 中,级别应该是 2,如果它在 TableC 中,那么级别应该是 3

4

3 回答 3

3

这是一种方法:

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

CASE假设您要返回最高级别,3 是 TableC 的最高级别,那么使用以下语句应该可以使用以下内容:

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,例如SELECT 1 as Id。

祝你好运。

于 2013-02-05T14:25:35.370 回答