【问题标题】:Resolve query containing multi columns and subquery return more than 1 value解析包含多列和子查询的查询返回超过 1 个值
【发布时间】:2020-08-18 04:09:01
【问题描述】:

我有一个非常简单的带有值的表:

CREATE TABLE multiplication(
        a SMALLINT, b SMALLINT);
INSERT INTO multiplication(a, b)
VALUES (1, 2), (2, 4), (3, 3)

当我尝试打印结果时

DECLARE @Result INT;
SELECT @Result = (SELECT a, b, a * b AS c FROM multiplication)
PRINT @Result   

我收到了错误

当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。

我知道我收到此错误是因为我试图将两列分配给一个变量。然后我删除其他列并得到错误

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

我也尝试选择顶部,但没有运气。那么如何获得包含多列和子查询的查询返回超过 1 个值的结果呢?

【问题讨论】:

  • 您不能将结果集(这是您的 SELECT 语句返回的内容)分配给标量值(您的局部变量)。想想你的目标和你想要完成的事情。就目前而言,您无法执行此分配/打印逻辑。
  • 您希望@Result单个值 得到这个代码吗?您不仅要尝试分配三个值(aba * b),还要尝试分配这些值三次(表中的每一行一次)。
  • 您希望如何将 3 列、3 行 SELECT 放入标量变量@Result???
  • “那么如何获得包含多列和子查询的查询返回超过 1 个值的结果?”。您创建一个表变量而不是标量变量。

标签: sql-server


【解决方案1】:

你只是想看看你的结果吗?然后只需选择值而不将其放入变量中:

SELECT a, b, a * b AS c FROM multiplication

如果你真的想把它变成一个变量,那么 Sql Server 有一个特殊的变量类型叫做table variables。像这样声明一个:

declare @Results table (
    a smallint,
    b smallint,
    c smallint
);

然后像插入任何其他类型的表格一样插入它:

insert @Results
SELECT a, b, a * b AS c FROM multiplication

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多