我有一個表:SQL語句來捕獲類似的行具有不同ID的
term_id course_id
1 592
1 603
2 592
2 603
2 700
如何創建一個查詢,選擇全部course_ids是足月1和2?
我有一個表:SQL語句來捕獲類似的行具有不同ID的
term_id course_id
1 592
1 603
2 592
2 603
2 700
如何創建一個查詢,選擇全部course_ids是足月1和2?
SELECT course_id
FROM T
WHERE term_id=1
INTERSECT
SELECT course_id
FROM T
WHERE term_id=2
或者
SELECT course_id
FROM T
WHERE term_id IN (1,2)
GROUP BY course_id
HAVING COUNT(DISTINCT term_id) = 2
令人驚歎。我不得不使用交叉點,因爲我也想要其他幾個字段。現在......我還可以在另一張桌子上加入這個交叉點的結果嗎? – speg 2011-05-11 14:54:27
是的。您可以將查詢放入CTE中。 '; WITH Q AS(
是的。相交的項目應具有相同的值,當然除外。 – speg 2011-05-11 15:08:41
SELECT * INTO #TEMP1
FROM T
WHERE TERM_ID = 1
SELECT * INTO #TEMP2
FROM T
WHERE TERM_ID = 2
SELECT DISTINCT COURSE_ID
FROM #TEMP1
WHERE COURSE_ID IN (SELECT DISTINCT COURSE_ID FROM #TEMP2)
馬丁的回答簡潔而巧妙的,但我會在兩個方法拋出這可能是更容易解析,這取決於你用什麼樣的閱讀當然。
沒有讓你的架構進行任何假設:
SELECT DISTINCT
course_id
FROM
MyTable AS T1
WHERE
term_id = 1
AND EXISTS (SELECT * FROM MyTable AS T2 WHERE T1.course_Id = T2.course_id AND T2.term_id = 2)
如果如我所料,{COURSE_ID,term_id}是獨一無二的,你也可以這樣做:
SELECT
T1.course_id
FROM
MyTable AS T1
INNER JOIN MyTable AS T2 ON T1.course_id = T2.course_id
WHERE
T1.term_id = 1
AND T2.term_id = 2
更一般的情況下, ,以獲得多個學期的所有課程:
這是什麼關係型數據庫? – 2011-05-11 14:38:10
SQL Server 2005 – speg 2011-05-11 14:41:07