选择条件列但获取子查询返回超过 1 个值

Posted

技术标签:

【中文标题】选择条件列但获取子查询返回超过 1 个值【英文标题】:Select conditional column but getting subquery returned more than 1 value 【发布时间】:2021-08-30 02:25:24 【问题描述】:

我有一个包含销售信息的数据库。有 CustomerID、FirstName、LastName 和 State 列。在州内只有加利福尼亚州和德克萨斯州。我需要那些住在加利福尼亚州的人显示他们的名字,而那些住在德克萨斯州的人则显示他们的姓氏。

执行以下步骤:

IF (SELECT State FROM Customer) = 'California'
(SELECT FirstName FROM Customer) 
ELSE 
(SELECT LastName FROM Customer) 

但是有一个错误,在我看来

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的

请帮忙

【问题讨论】:

由于我不完全符合 SQL 大师的资格,这里我的 2 美分:内部 sql 语句“(SELECT FirstName FROM Customer)”中的 where 子句怎么样?这将始终选择所有客户,因此返回不止一行... 请不要标记多个 RDBMS - mysql SQL Server。请更正您的标签。 【参考方案1】:

您似乎想要一个条件表达式,case

SELECT
    CASE WHEN STATE = 'California' THEN FirstName ELSE LastName END
FROM Customer

注意事项:

您希望在 SQL 中尽可能多地使用基于集合的逻辑。并避免程序逻辑(IF/THEN/END)。 如果您尝试将单个值与返回多个值的查询结果进行比较,您总是会遇到错误。这是您需要WHERE 子句和/或TOP 1 后跟ORDER BY 的地方。 事实上,您几乎总是希望同时使用WHERE 子句来过滤结果,并使用ORDER BY 来对结果进行排序。您可能想重温一下关于这个的 SQL 教程。

【讨论】:

以上是关于选择条件列但获取子查询返回超过 1 个值的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 子查询返回超过 1 个值。子查询遵循 =, !=, <, <= , >, >=

子查询返回超过 1 个值。这是啥意思?

SQL Server 触发器:子查询返回超过 1 个值

子查询返回超过 1 个值。当子查询跟随 = 或子查询用作表达式时,这是不允许的

子查询在 sqlc# 中返回超过 1 个值

TSQL:SELECT CASE WHEN THEN 子查询:错误:子查询返回超过 1 个值