如果左连接没有返回值,有没有人知道如何返回默认值?
这是我的代码
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
答案 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