【问题标题】:Searching Unique Id in Multiple Tables在多个表中搜索唯一 ID
【发布时间】:2013-01-20 12:10:22
【问题描述】:

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

Table Hierarchy

        TableA
                TableB
                         TableC

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

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

【问题讨论】:

  • 如果存在多个表怎么办?

标签: sql


【解决方案1】:

您需要一个如下所示的查询:

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】:

    这是一种方法:

    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"
    

    【讨论】:

    • 如何将其转换为以 Id 作为参数并返回每一行的级别的函数。基本上我想在查询中使用它
    【解决方案3】:

    假设您要返回最高级别,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 as Id。

    祝你好运。

    【讨论】:

    • 对不起,没有表作为层次结构。共有三个表,即 TABLEA、TABLEB 和 TABLEC
    猜你喜欢
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2021-02-14
    相关资源
    最近更新 更多