簡體   English   中英

SQL Server JOIN語句

[英]SQL Server JOIN Statements

我正在嘗試從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。 當子查詢遵循=,!=,<,<=,>,> =或將子查詢用作表達式時,不允許這樣做。

經過大量研究,我仍然感到困惑。 並且幫助將不勝感激。 謝謝。

  1. 您不能將DISTINCT應用於單個列,並且我不確定在此是否需要它,除非您的表允許所有這些列中的重復值。
  2. 我不知道為什么要兩次連接這些表,或者根本不使用子查詢。
  3. 我不知道為什么要輸出兩次t1.reseller ...即使您使用了t1一個,又使用了t2一個,因為它們在t1.reseller上是匹配的,所以每行它們總是相同的!
  4. 您有一個隱式聯接並且缺少where子句-這會導致笛卡爾積,這正是我始終建議不采用這種語法的原因 也許這就是觸發DISTINCT使用的原因?
  5. 從t2開始,您似乎根本沒有使用任何列。 (雙重)自聯接的意義是什么?

似乎您需要的是:

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

否則,請准確描述您的查詢應該執行的操作(通過顯示示例數據和所需結果)。

在子查詢中添加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) 

您收到的錯誤是因為此查詢:

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

返回多個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM