sql - SQL Server 中的条件连接依赖于其他表值

标签 sql sql-server tsql

我需要根据另一个表中的值来决定应该在连接语句中使用哪个表

我尝试使用 CASECOALESCE 但无法取得任何成功。

  • TableA 有 A 和 B 和 C 以及许多其他列
  • TableB 有 ID 和 NAME 列
  • TableC 有 ID 和 NAME 列

我的选择语句是;

从表 A A 中选择 A.D、A.E、A.F

如果 A.E = 1 则应使用以下连接

左外连接 TableB B ON A.B = B.ID

B.NAME应该在select语句中返回

如果 A.E = 2 则应使用以下连接

左外连接 TableC C ON A.B = C.ID

C.NAME应该在select语句中返回

最佳答案

只需将您的条件添加到连接中,然后使用 case 语句将正确的字段拉到您的结果集中,例如

select A.D, A.E, A.F
  , case when B.[Name] is not null then B.[Name] else C.[Name] end [Name]
from TableA A
left outer join TableB B ON A.B = B.ID and A.E = 1
left outer join TableC C ON A.B = C.ID and A.E = 2

关于sql - SQL Server 中的条件连接依赖于其他表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57366388/

相关文章:

sql-server - 无法向 sql server 单个单元格插入超过 43679 个字符?

sql-server - 具有事件源的 CQRS 模式具有用于读/写的单个数据库

asp.net - 存储过程查询中的 SQL 注入(inject)

mysql - 选择子查询产生结果,但如果在更新子句中使用则不会

sql - 与 CREATE OR REPLACE 等效的 Derby 是什么?

c# - Parameters.Add(string, object) 和 Parameters.AddWithValue 之间的区别

sql - 需要帮助创建 linq 选择

java - JDBC SQL 数据库被锁定?

sql - TSQL 使用子字符串替换也会替换字符串的其他部分

sql - 使用选项创建 View (maxrecursion)