sql - JOIN (SQL) 的 COALESCE 与 OR 条件

标签 sql sql-server tsql join coalesce

我有 Event

TABLE Event(
EventId [int] IDENTITY(1,1) NOT NULL,
EventSource1Id [int] NULL,
EventSource2Id [int] NULL
)

包含有关来自不同来源的事件的信息
其中事件源之一可以为空
TABLE EventSource1(
Id [int] IDENTITY(1,1) NOT NULL,
Name [nvarchar](50) NULL,
VenueId [int] NOT NULL
)


TABLE EventSource2(
Id [int] IDENTITY(1,1) NOT NULL,
Name [nvarchar](50) NULL,
VenueId [int] NOT NULL
)

TABLE Venue(
Id [int] IDENTITY(1,1) NOT NULL,
TimeZone [nvarchar](100) NOT NULL
)

我想创建 View ,但我不确定什么是最好的使用方法:coalesce vs OR condition for JOIN
第一个选项:
SELECT 
ev.[Id] AS 'Id',
ven.[Id] AS 'VenueId'
FROM Event ev
LEFT JOIN EventSource1 source1 ON source1.[Id] = ev.EventSource1Id
LEFT JOIN EventSource2 source1 ON source2.[Id] = ev.EventSource2Id
LEFT JOIN Venue AS ven ON ven.[Id] = source1.[VenueId] OR v.[Id] = source2.[VenueId]

第二种选择:
SELECT 
ev.[Id] AS 'Id',
ven.[Id] AS 'VenueId'
FROM Event ev
LEFT JOIN EventSource1 source1 ON source1.[Id] = ev.EventSource1Id
LEFT JOIN EventSource2 source1 ON source2.[Id] = ev.EventSource2Id
LEFT JOIN Venue AS ven ON ven.[Id] = COALESCE(source1.[Id], source2.[Id])

请问你能帮帮我吗?

最佳答案

COALESCE 通常会产生更好的查询计划。你应该用你的数据进行测试。

关于sql - JOIN (SQL) 的 COALESCE 与 OR 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38928055/

相关文章:

sql - 在事先不知道模式的情况下解析 XML 的更好方法

sql - Oracle SQL - 按月选择两个日期之间的用户

sql - LINQ To SQL分页

mysql语句insert,如果插入了,再插入一条

SQL 服务器 2005 : T-SQL INSERT INTO and OUTPUT timestamp to a variable

sql - 带有两个行终止符的 BULK INSERT

sql - 插入组合(值和选择)

sql-server - CTE 返回层次结构中的所有项目

sql-server - 将 GROUP BY 与 FIRST_VALUE 和 LAST_VALUE 一起使用

c# - 无法从 2 个客户端应用程序访问同一个 SQL Server 数据库