SQL Server JOIN语句

时间:2013-03-08 16:43:44

标签: sql sql-server inner-join

我正在尝试从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。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

经过大量研究后,我仍然感到难过。非常感谢帮助。感谢。

3 个答案:

答案 0 :(得分:3)

  1. 您不能将DISTINCT应用于单个列,除非您的表允许所有这些列中包含重复值,否则我不确定是否需要此列。
  2. 我不知道你为什么要两次加入这些表,或者根本不使用子查询。
  3. 我不知道您为什么要输出t1.reseller两次...即使您使用t1t2中的一个,因为它们在连接上匹配,对于每一行,它们总是一样的!
  4. 你有一个隐式连接你缺少一个where子句 - 它导致了一个笛卡尔积,并且是exactly why I always recommend against this syntax。也许这就是触发使用DISTINCT
  5. 的原因
  6. 您似乎根本没有使用t2中的任何列。 (双重)自我加入有什么意义?
  7. 似乎所有你需要的是:

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

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

答案 1 :(得分: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) 

答案 2 :(得分:-1)

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

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

返回多个值。