Sql-Server

在 SQL Server 中加入對 id 的選擇查詢

  • November 18, 2014

我有三個表,SELECT我需要加入結果。

感覺這應該是一個相當容易的任務,但我在語法上很掙扎。

使用 Microsoft SQL Server Enterprise Edition v9.00.3042.00,即 SQL Server 2005 Service Pack 2

到目前為止我想出的是..

  • TableAid(int)、name(varchar)、comment(varchar) 和extra(varchar)。
  • TableBid(int) 和char(varchar)
  • TableCeid(int) 和info(varchar)。

SQL查詢:

SELECT
   b.count, a.id, a.name, a.comment 
FROM
   (SELECT * 
    FROM TableA a
    WHERE id + 100 IN (SELECT distinct(eid)
                       FROM TableC
                       WHERE NOT eid IS NULL)
   )
JOIN
  (SELECT 
       char, count(*) AS count 
   FROM TableB b sel 
   GROUP BY char) on a.id + 100 = b.char

我想要的是頂部選擇()的輸出,其中TableA的計數是TableB``a.id+100``b.char

原諒我的業餘 sql ..

如果我理解正確,我認為這應該有效……

我們正在檢查它TableA.id+100,然後計算出現TableC.eid的次數。TableA.id+100``TableB.char

不過,創建一個SQLFiddle總是好的,這樣其他人就可以輕鬆地獲取您的架構和程式碼進行調試。

SELECT
 a.id,
 a.name,
 a.comment,
 COUNT(b.char) AS count
FROM TableA a
INNER JOIN TableB b 
 ON a.id+100 = b.char
INNER JOIN TableC 
 ON a.id+100 = c.eid
GROUP BY a.id, a.name, a.comment;

正如 Aaron Bertrand 在下面指出的那樣,使用EXISTS將有助於消除重複eids 出現在 何處的重複計算TableC

SELECT
     a.id,
     a.name,
     a.comment,
     COUNT(b.char) AS count
FROM TableA a
INNER JOIN TableB b 
 ON a.id+100 = b.char
WHERE EXISTS (SELECT * FROM TableC where eid = a.id+100)
GROUP BY a.id, a.name, a.comment;

引用自:https://dba.stackexchange.com/questions/82849