Sql-Server
在 SQL Server 中加入對 id 的選擇查詢
我有三個表,
SELECT
我需要加入結果。感覺這應該是一個相當容易的任務,但我在語法上很掙扎。
使用 Microsoft SQL Server Enterprise Edition v9.00.3042.00,即 SQL Server 2005 Service Pack 2
到目前為止我想出的是..
TableA
有id
(int)、name
(varchar)、comment
(varchar) 和extra
(varchar)。TableB
有id
(int) 和char
(varchar)TableC
有eid
(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
將有助於消除重複eid
s 出現在 何處的重複計算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;