选择案例时间& INNER JOIN WHERE NULL或NOT NULL

时间:2018-01-30 17:22:03

标签: sql-server join

我有以下SELECT CASE WHEN查询:

SELECT CASE (WHEN TableA.UserId IS NULL) THEN 'CustomString'
ELSE User.Name 
FROM TableA
INNER JOIN User ON A.UserId = User.Id

问题是它只返回UserIdTableA与NULL不同的记录。但我还应该在UserId IS NULL中包含那些记录,并在这种情况下返回“CustomString”。我应该在查询中添加什么来实现这一目标?

4 个答案:

答案 0 :(得分:1)

使用 LEFT JOIN 。有关https://www.w3schools.com/sql/sql_join_left.asp

的更多信息
SELECT 
        CASE 
             WHEN TableA.UserId IS NULL THEN 'CustomString'
             ELSE User.Name 
       END AS UserName
FROM TableA
LEFT JOIN User ON A.UserId = User.Id

你也可以用这样的ISNULL函数替换CASE WHEN:

SELECT ISNULL(TableA.UserId, 'CustomString') AS UserName
FROM TableA
LEFT JOIN User ON A.UserId = User.Id

答案 1 :(得分:0)

您应该申请left join

SELECT CASE WHEN A.UserId IS NULL THEN 'CustomString'
ELSE User.Name END as CaseUserId
FROM TableA A
LEFT JOIN User ON A.UserId = User.Id

答案 2 :(得分:0)

"它仅返回UserId"中NULLTableA不同的记录。因为(我认为)你在表UserId中没有User。所以也许你应该使用LEFT JOIN代替INNER JOIN

答案 3 :(得分:0)

将此查询与LEFT JOIN和内联IF语句一起使用,如下所示:

    SELECT IIF(A.UserId IS NULL, 'CustomString', U.Name)
      FROM TableA A
      LEFT JOIN User U ON A.UserId = U.Id

在SQL Server 2012+中,您可以使用IIF函数。

相关问题