【发布时间】:2014-08-02 08:39:10
【问题描述】:
我使用的是 SQL Server 2008 并且有以下场景:
我有 Table a 字段 id 和 groupId。
我也有 Table b 字段 id 和 groupId。
Table b 中的规则是:
If a.id = 0, then a.groupId = b.groupId
Else a.id = b.id (in which case a.groupId = 0)
这两个表也由agrId 链接,这样a.agrId = b.agrId
如何在满足上述规则的同时加入这些表?
更新:抱歉,我已经更新了规则并在下面添加了我的尝试:
select * from a
inner join b
on a.agrId = b.agrId
where (
(b.id > '0' and b.groupId = '0')
or
(b.groupId > '0' and b.id = '0')
)
【问题讨论】:
-
你能举个例子吗?
-
ID 和 GroupID 中的任何一个都将具有值...对吗?
-
您可以使用 CASE 等加入“条件”,但如果您追求高性能,则使用专门的查询会更好。
-
加入什么? ID = 0,加入GroupID,GroupID = 0,加入ID?
-
请记住,在
JOINs 中使用OR会严重影响性能。你最好把它们写成 equi-joins 并做一个UNION。看看这里:stackoverflow.com/questions/5901791/…
标签: sql sql-server sql-server-2008 inner-join