【问题标题】:SQL Server return NULL (or value) in case entry does not exist - Multiple Columns如果条目不存在,SQL Server 返回 NULL(或值) - 多列
【发布时间】:2015-07-30 17:36:59
【问题描述】:

我有一个“数字”作为PK 的填充表。我想要一个搜索特定数字的查询,如果没有找到,它将返回“NULL”而不是 no 值。

我已经设法做到了一次回报:

SELECT (SELECT Risk_Impact FROM [dbo].[RFC] WHERE Number = 'RFC-018345')

但是我想选择多个列,例如:

SELECT (SELECT Risk_Impact, Risk_Impact, BI_TestingOutcome FROM [dbo].[RFC] WHERE Number = 'RFC-018345')

但是它给了我一个错误:

"Msg 116, Level 16, State 1, Line 1 当子查询不使用 EXISTS 引入时,选择列表中只能指定一个表达式。"

你能帮忙吗?

提前谢谢你

【问题讨论】:

  • 只试SELECT Risk_Impact, Risk_Impact, BI_TestingOutcome FROM [dbo].[RFC] WHERE Number = 'RFC-018345'
  • 是的,但我希望它返回:NULL |空 |当值 RFC-xxxxx 不存在时为 NULL
  • 您为什么要尝试 SELECTR Risk_Impact 两次?

标签: mysql sql sql-server


【解决方案1】:

试试

select p.* from (select 1 as t ) v
left join  (select * from [dbo].[RFC] WHERE Number = 'RFC-018345') p
on 1=1

【讨论】:

  • 你可以 CROSS JOIN 和消除子查询:)
  • @HansLindgren - 要使cross join 工作,您需要从RFC 返回数据
【解决方案2】:

在 sql server 中应该像这样使用 isnull 函数

SELECT isnull((SELECT Risk_Impact FROM [dbo].[RFC] WHERE Number = 'RFC-018345'),0)

【讨论】:

  • 不能解决我遇到的问题我希望 SQL 返回 NULL |空 |如果值编号不存在,则为 NULL
  • 是的,仅 Risk_Impact 有效,但我也想输出多列:)
【解决方案3】:

完善的@Sagar 查询:

更好的缩进可能对人们学习更有帮助。

前任: 选择 [dbo].[RFC].* 从 (选择 1 作为 Col1)作为 V 交叉连接 [dbo].[RFC] 其中编号 = 'RFC-018345'

编辑:我忙于删除子查询。工作查询:

SELECT 
    [dbo].[RFC].* 
FROM 
    (SELECT 1 AS Col1) AS V
    LEFT JOIN 
    [dbo].[RFC] 
    ON Number = 'RFC-018345'

(我还主张不要在生产附近的任何地方选择 *,但始终明确说明结果集中的列。例如:

SELECT 
    [dbo].[RFC].[Risk_Impact], 
    [dbo].[RFC].[BI_TestingOutcome]
FROM 
    (SELECT 1 AS Col1) AS V
    LEFT JOIN 
    [dbo].[RFC] 
    ON Number = 'RFC-018345'

)

【讨论】:

  • 要使cross join 工作,您需要从RFC 返回数据。检查这个。 SELECT * FROM (SELECT 1 as col1) t CROSS JOIN (SELECT 1 a)v WHERE t.a = 0
  • 这将不起作用..如果数字在 RFC 表中不存在
  • @HansLindgren - 您可以更正答案或将其删除。在目前的状态下,它对这个问题没有建设性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 2020-02-20
  • 1970-01-01
相关资源
最近更新 更多