1

我正在尝试从 SQL Server 数据库(使用 SQL Server Management Studio)中提取一些信息,如下所示:

SELECT DISTINCT( t1.accountid ), 
               t1.accountname, 
               t1.reseller, 
               (SELECT t1.reseller 
                FROM   dbname t1 
                       INNER JOIN dbname t2 
                               ON t1.reseller = t2.reseller 
                WHERE  t1.reseller IN ( 1 )) AS Reseller 
FROM   dbname t1, 
       dbname t2 

运行它会给我一个错误:

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

经过大量研究,我仍然很难过。帮助将不胜感激。谢谢。

4

3 回答 3

3
  1. 您不能应用于DISTINCT单个列,我不确定这里是否需要它,除非您的表允许所有这些列中的重复值。
  2. 我不知道你为什么要加入这些表两次,或者根本不使用子查询。
  3. 我不知道你为什么要输出t1.reseller两次......即使你使用了一个 fromt1和一个 from t2,因为它们在连接上匹配,所以每一行它们总是相同的!
  4. 您有一个隐式连接,并且缺少 where 子句 - 这会导致笛卡尔积,这正是我始终建议不要使用这种语法的原因。也许这就是触发使用的原因DISTINCT
  5. 您似乎根本没有使用 t2 中的任何列。(双)自加入有什么意义?

似乎您只需要:

SELECT accountid, accountname, reseller
  FROM dbo.dbname
  WHERE reseller = 1;

否则,请准确描述您的查询应该做什么(通过显示示例数据和所需结果)。

于 2013-03-08T17:07:36.793 回答
0

在子查询中添加 TOP 1 子句

如下

       (SELECT TOP 1 t1.reseller 
        FROM   dbname t1 
               INNER JOIN dbname t2 
                       ON t1.reseller = t2.reseller 
        WHERE  t1.reseller IN ( 1 )) AS Reseller) 
于 2013-04-24T09:18:17.517 回答
-1

您收到的错误是因为此查询:

           (SELECT t1.reseller 
            FROM   dbname t1 
                   INNER JOIN dbname t2 
                           ON t1.reseller = t2.reseller 
            WHERE  t1.reseller IN ( 1 )) AS Reseller)

返回多个值。

于 2013-03-08T16:53:32.937 回答