【问题标题】:sql left join - return a default value if no resultssql left join - 如果没有结果,则返回默认值
【发布时间】:2015-03-18 00:13:21
【问题描述】:

如果左连接没有返回值,有谁知道如何返回默认值?

这是我的代码

 SELECT 
     colName
 FROM table1 LEFT JOIN table2
 ON table1.ID = table2.ID
 WHERE table1.ID = value

我想返回“没有找到结果”

示例

SELECT 
ISNULL(photoName, 'No Photos Found') as (photoName, 
FROM usertable
LEFT OUTER JOIN
phototable
ON
usertable.id= phototable.id
WHERE userID = 1

用户表

Id | User
0  | Jack

照片桌

ID | Photo
0  | me.jpg

【问题讨论】:

  • rdsbms 是 sql server
  • 所以使用isnull : SELECT isnull(colName,'defalut value') FROM table1 LEFT JOIN table2 ON table1.ID = table2.ID
  • 但是当我添加 where 子句时它不起作用
  • 你真的不需要在这里加入。您已经有了 table2 端的 ID。 SELECT coalesce(colname, 'no results') FROM table2 WHERE ID = value
  • 我需要加入表格

标签: sql sql-server join default


【解决方案1】:

有几种选择,语法因您的平台而异。 Collesce、isnull 和 ifnull 应该都可以工作

SELECT 
   isnull(colName,'There are no results found')
FROM table1 LEFT JOIN table2
ON table1.ID = table2.ID

【讨论】:

  • 谢谢你的工作,但我犯了一个错误,因为有一个 where 子句。
  • @LeslieJones 您将从 table1 左连接到 table2...所以 table1 上的 where 子句应该可以正常工作。你能提供更多关于“它不起作用”的细节吗?
【解决方案2】:

甲骨文:

nvl(colname,'There are no results found.')

SQL 服务器:

isnull(colname,'There are no results found.')

MySQL:

ifnull(colname,'There are no results found.')

几乎任何数据库:

coalesce(colname,'There are no results found.')

【讨论】:

    【解决方案3】:

    错误很可能是 where 子句。如果它位于 phototable 中的列上,则您已将左连接变为内连接。将该条件作为 where 子句的一部分。

    或者问题可能是连接,在我看来,来自两个不同表的 ID 字段不太可能是正确的连接。但这当然完全取决于数据库中数据的含义。顺便说一句,正是这样的事情就是为什么没有前缀的 ID 是一件非常糟糕的事情,因为含义不清楚。它是一个 SQL 反模式。

    或者问题可能是如果根本没有找到记录,您希望返回记录,这是一个完全不同的问题。这需要一个 UNION ALL 语句。

    SELECT 
    ISNULL(photoName, 'No Photos Found') as photoName 
    FROM usertable
    LEFT OUTER JOIN
    phototable
    ON
    usertable.id= phototable.id
    WHERE userID = 1
    UNION ALL
    SELECT  'No Photos Found' as  photoName
    where (SELECT 
    Count(*)
    FROM usertable
    LEFT OUTER JOIN
    phototable
    ON
    usertable.id= phototable.id
    WHERE userID = 1) = 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 2018-12-12
      • 2013-05-12
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      相关资源
      最近更新 更多