SQL Server - 内部加入 - 条件语句
Posted
技术标签:
【中文标题】SQL Server - 内部加入 - 条件语句【英文标题】:SQL Server - Inner Join On - Conditional Statement 【发布时间】: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? 请记住,在JOIN
s 中使用OR
会严重影响性能。你最好把它们写成 equi-joins 并做一个UNION
。看看这里:***.com/questions/5901791/…
【参考方案1】:
试试这个
SELECT *
FROM TableA A
INNER JOIN TableB B
ON (B.ID = 0 AND A.groupId = B.groupId)
OR (B.groupId = 0 AND A.id = B.id)
【讨论】:
你能在你的答案中编辑任何内容吗.. 我误解了答案并投了反对票,但现在它已经超过 5 分钟了,我无法回滚它【参考方案2】:它需要一个计算结果为真或假的表达式,以指示是否应连接这两行。所以根据你所说的,这将是加入条件:
select *
from tA a
inner join tB b
on (a.id = 0 and a.groupid = b.groupid)
or (a.groupid = 0 and a.id = b.id)
【讨论】:
【参考方案3】:试试这个:
SELECT *
FROM a INNER JOIN
b ON a.agrId = b.agrId
WHERE (b.id = '0' AND b.groupId = a.groupId)
or
(b.groupId = '0' AND b.id = b.id)
【讨论】:
以上是关于SQL Server - 内部加入 - 条件语句的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server数据库用sql语句实现分页查询 (从M条数据开始,查找N条记录。sqlserver数据库。请举例说明。)