【问题标题】:INNER JOIN if null columns如果为空列,则进行 INNER JOIN
【发布时间】:2018-05-24 17:22:49
【问题描述】:
x table
id - name - balance
1 - test - 500
2 - test 2 - 400
3 - test 3 - 300
y table
idx - idy - name
1 - null
2 - 5
3 - null
4 - 6
SELECT x.Name, SUM(x.Balance)
FROM x
INNER JOIN y ON ???
if IS NULL y.idy ON (x.id = y.idx)
ELSE ON (x.id = y.idy)
我的英语不足以说明问题。但我的问题是可以理解的
【问题讨论】:
标签:
sql
sql-server
tsql
inner-join
【解决方案1】:
您也可以尝试使用 ANSI SQL 标准 coalesce() 函数来检查 null 值
SELECT x.Name, SUM(x.Balance) [Balance] FROM x
join y ON coalesce(y.idy, y.idx) = x.id
group by x.Name
结果:
Name Balance
test 500
test 3 300
【解决方案2】:
SQL HERE
您可以使用ISNULL,如下所示:
SELECT x.Name, SUM(x.Balance)
FROM x
INNER JOIN y ON x.id = isnull(y.idy, y.idx)
group by x.Name
【解决方案3】:
布尔逻辑如下所示:
ON (y.idy IS NULL AND x.id = y.idx) OR (x.id = y.idy)
【解决方案4】:
试试这个:
SELECT x.Name,
SUM(x.Balance)
FROM x
INNER JOIN y
ON (y.idy IS NULL AND x.id = y.idx) OR (x.id = y.idy)
GROUP BY x.Name;