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

时间:2015-03-18 00:13:21

标签: sql sql-server join default

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

这是我的代码

 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

4 个答案:

答案 0 :(得分:1)

根据您的平台,有一些选择和语法会有所不同。 Collesce,isnull,ifnull应该全部工作

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

答案 1 :(得分:0)

甲骨文:

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

SQL Server:

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

MySQL的:

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

几乎所有数据库:

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

答案 2 :(得分:0)

代码变体如:

SELECT COALESCE(customers.customers_id,'default') FROM customers 
LEFT JOIN orders ON customers.customers_id = orders.customers_id
WHERE customers.customers_email_address  = 'email@notexists';

SELECT ifnull(customers.customers_id,'default') FROM customers 
LEFT JOIN orders ON customers.customers_id = orders.customers_id
WHERE customers.customers_email_address  = 'email@notexists';

SELECT ifnull(customers_id,'default') FROM customers 
WHERE customers_email_address  = 'emptyemaivalue'

..显示没有错误,但也不是默认值。想法为什么? mysql中是否需要任何设置?

答案 3 :(得分:0)

错误很可能是where子句。如果它位于可光化的列上,则您已将左连接转换为内连接。将该条件作为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
相关问题