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.')
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 - 如果没有结果,则返回默认值的主要内容,如果未能解决你的问题,请参考以下文章
sql inner join 与 left join和right join 执行效率上面有多大差别?
sql中left join、right join、inner join有啥区别?
SQL SERVER LEFT JOIN, INNER JOIN, RIGHT JOIN
MySql子查询(wherefromexists)及连接查询(left joinright joininner joinunion join)