【问题标题】:SQL case/if condition Join tbl A or tbl BSQL case/if 条件 Join tbl A 或 tbl B
【发布时间】:2021-08-19 23:54:26
【问题描述】:

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 or tabFrute).name, (tabVegetable 或 tabFrute)。颜色

注意:我只有 tblFruts 和 tblVegetable,所以我总是选中这两个选项。

谢谢!

【问题讨论】:

  • 您的问题是什么?您提供了规格,但没有指出您的具体问题。

标签: sql sql-server tsql join


【解决方案1】:

使用LEFT 连接到tblFood 的其他表,并在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 

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 2021-08-13
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多