sql - 获取 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
我怎样才能得到整个家具清单,因为其中一些是椅子,一些是婴儿床。我怎样才能将这些桌子与家具桌连接起来并获取列表?
解决方案
这是一个经典的学习问题,这就是为什么我没有给你解决这个问题的代码,而是你需要这样做的所有见解。
您有多种可能的方法,但我正在描述两种简单的方法:
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
推荐阅读
- php - 如何按优先级和日期排序?
- swift - 快速过滤领域上的项目
- php - 如何验证通过mysql查询手动散列插入数据库的php中的密码?
- php - 在while循环中拆分结果
- sql - Hive 查询:阶段中的不明确列引用 acct_nbr
- java - 我的 Collections.sort 有什么问题?
- postgresql - 在 docker 中运行 Postgresql 命令
- python - 无法使用 Telegram api 和 python 获取图像信息
- swift - 如何设置 Xcode Playground 以稳定地使用构建的框架?
- laravel - 取消选中单选按钮 - laravel