选择条件列但获取子查询返回超过 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 个值。子查询遵循 =, !=, <, <= , >, >=