sql - SQL case/if 条件 Join tbl A 或 tbl B
问题描述
SQL 服务器...
我需要将 tbl_B 或 tbl_C 与 tbl_A 连接起来。案例 tblA.id = 1 加入 B 或案例 tblA.id = 2 加入 C
让我们说这个例子:
Table: tblFood
Id_Food | Fk_Id_Foodtype
1 | 1
1 | 2
Table: tabVegetable
Id | Mame |Color
1 | eggplant |black
Table: tabFrute
Id | Name |Color
1 | apple |red
在上面的桌子上tblFood ...
如果Fk_Id_Foodtype = 1在tabVegetable上加入Id_Food
如果Fk_Id_Foodtype = 2在tabFrute上加入Id_Food
所以我可以返回执行这样的选择:SELECT tblFood.Id_Food,(tabVegetable 或 tabFrute)。名称,(tabVegetable 或 tabFrute)。颜色
注意:我只有 tblFruts 和 tblVegetable,所以我总是选中这两个选项。
谢谢!
解决方案
通过连接连接到tblFood
其他表,LEFT
并在ON
子句中指定Fk_Id_Foodtype
.
在SELECT
列列表中,用于COALESCE()
从每个表中获取列的值:
SELECT f.*,
COALESCE(v.Name, fr.Name) Name,
COALESCE(v.Color, fr.Color) Color
FROM tblFood f
LEFT JOIN tabVegetable v ON f.Fk_Id_Foodtype = 1 AND v.Id = f.Id
LEFT JOIN tabFrute fr ON f.Fk_Id_Foodtype = 2 AND fr.Id = f.Id
推荐阅读
- python - 类型提示是比断言更安全的类型检查选项吗?
- wicket - Apache Wicket:使用单个 ajax 请求更新多个 FormComponent
- firebase - FCM 可以向其发送通知的用户段中的设备是否存在限制
- django - 在 Django 的 python shell 中创建模型及其关联
- r - 找出长度不同的两列的行之间哪些字符串相同
- json - json 文件错误:“预期为 json 对象、数组或文字”
- node.js - 在 node express hbs 中存储图像 - 选择什么方式?
- node.js - TypeError:无法读取 null 的属性“文件”
- asp.net-mvc - Datatables ajax 发布请求失败,状态码为 500
- java - BufferedReader 不读取最后一行