首页 > 解决方案 > 获取 Super 和 sub 类型的列表

问题描述

我将 SQL Server 中的表作为 Super 和 Sub 类型,如下所示。现在,如果我必须获取家具清单,那么我该如何获取清单?

家具桌:

Id    FurnituretypeId NoofLegs
-------------------------------
1       1               4   
2       2               4

家具类型表:

Id     Name
-----------------
1    chair
2    cot
3    table

椅子桌:

Id    Name        CansSwing   CanDetachable      FurnitureId    
------------------------------------------------------------
1     Chair1         Y             Y                 1

婴儿床表:

Id    Name        CotType      Storage   StorageType   FurnitureId
-------------------------------------------------------------------
1      Cot1       Auto           Y            Drawer       2

我怎样才能得到整个家具清单,因为其中一些是椅子,一些是婴儿床。我怎样才能将这些桌子与家具桌连接起来并获取列表?

标签: sqlsql-server

解决方案


这是一个经典的学习问题,这就是为什么我没有给你解决这个问题的代码,而是你需要这样做的所有见解。

您有多种可能的方法,但我正在描述两种简单的方法:

1) 使用 UNION 语句连接两个单独的查询,一个用于 Chair,另一个用于 Cot,请记住两个 SELECT 都必须返回相同的结构。

SELECT 
    a1,
    a2,
    etc..
FROM table1 a1
JOIN table2 a2 ON a1.some = a2.some
UNION
SELECT 
    a1,
    a3,
    etc..
FROM table1 a1
JOIN table3 a3 ON a1.some = a3.some

2)您可以在一个 SELECT 语句中对两个表使用 LEFT JOIN 并在选择中使用 COALESCE 或 ISNULL 来获取一个表或另一个表的值。在 WHERE 条件下,您必须强制一个或另一个连接不为空。

SELECT
    a1,
    COALESCE(a2,a3) as col2
FROM table1
LEFT JOIN table2 a2 ON a1.some = a2.some
LEFT JOIN table3 a3 ON a1.some = a3.some
WHERE 
    a2.some IS NOT NULL
    OR a3.some IS NOT NULL 

推荐阅读