【问题标题】: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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-15
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多