sql left join - 如果没有结果,则返回默认值

Posted

技术标签:

【中文标题】sql left join - 如果没有结果,则返回默认值【英文标题】:sql left join - return a default value if no results 【发布时间】: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 我需要加入表格 【参考方案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

【讨论】:

以上是关于sql left join - 如果没有结果,则返回默认值的主要内容,如果未能解决你的问题,请参考以下文章

[17]SQL LEFT JOIN 关键字

sql inner join 与 left join和right join 执行效率上面有多大差别?

sql中left join、right join、inner join有啥区别?

访问 SQL LEFT JOIN 不返回结果

SQL SERVER LEFT JOIN, INNER JOIN, RIGHT JOIN

MySql子查询(wherefromexists)及连接查询(left joinright joininner joinunion join)