我有一个场景,我需要在多个表中搜索唯一ID,并根据它存在的位置分配一个级别。
Table Hierarchy
TableA
TableB
TableC
表B保存表A的主键,表C保存表B的主键
我需要一个以Id作为参数的函数,并在此表层次结构和返回级别中搜索Id。如果它存在于TableA Level中,则应为One。如果它存在于TableB中,则Level应为2,如果它在TableC中,那么level应为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。
祝你好运。