首页 > 解决方案 > 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,所以我总是选中这两个选项。

谢谢!

标签: sqlsql-servertsqljoin

解决方案


通过连接连接到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 

推荐阅读