在多个表中搜索唯一ID

时间:2013-02-05 14:21:31

标签: sql

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

Table Hierarchy

        TableA
                TableB
                         TableC

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

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

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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)如果一个键存在于多个表中,这将为每个表返回一条记录,使您有机会构建程序逻辑处理那个案子。

答案 2 :(得分:0)

假设你想要返回最高级别,3是TableC的最高级别,那么类似这样的东西应该使用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,例如SELECT 1为Id。

祝你好运。