2013-06-28 63 views
2

之間的火車這是我的火車時間表的表我想站之間的列車的解決方案SQL查詢來查找電臺

Train Code 
15609 ABC 
15609 XYZ 
15609 PQR 
15609 ADI 
15609 QWE 
15609 XPM 
15609 IND 
15680 ABC 
15680 XYZ 
15680 PQR 
15680 ADI 
15680 QWE 
15680 XPM 
15680 IND 

對於輸出的用戶將給予代碼例如兩個輸入:ABCXYZ 並且輸出將是具有代碼ABCXYZ的所有列車編號。

回答

4

這應該做的伎倆。它也應該表現良好 - 不需要JOIN。

SELECT 
    Train 
FROM 
    dbo.TrainTime 
WHERE 
    Code IN ('ABC', 'XYZ') 
GROUP BY 
    Train 
HAVING 
    Count(DISTINCT Code) = 2 
; 
+0

感謝人,它完美無缺我需要 – SD7

+0

它比使用'JOIN'的查詢更好。你有沒有選擇它的原因? – ErikE

+0

+1我同意你的答案值得至少多+。 –

-1

好了,這是相當的,也許太簡單了:

select distinct [Train] from mytable 
where code = 'ABC' or code = 'XYZ' 

讓我知道如果我誤解了財產以後。

+0

它不得有或我需要兩個代碼在一起有共同的火車號碼 – SD7

+0

哦,我看到,對不起。然後,我建議使用下面提出的羅馬派克之類的東西。 –

4

我想你想要的是像這樣

select Train from mytable where Code = 'ABC' 
intersect 
select Train from mytable where Code = 'XYZ' 

SQL FIDDLE EXAMPLE

+0

我很困惑如何選擇並不是表現得很好的查詢並投票得更多?這個查詢需要一個'JOIN',這不是必需的。比較[執行計劃在SQL小提琴](http://sqlfiddle.com/#!6/4f345/1)!我向你保證,在一張大桌子上這將是一個非常重要的區別。另外,這不能簡單地推廣到任意數量的電臺 - 查詢必須徹底改變長度。 – ErikE

+0

儘管我可以(部分)同意泛化查詢,但我認爲我的查詢更具可讀性。 性能取決於您桌上的索引。如果索引正確,兩個查詢的性能都是相等的。 我試過~200000行索引上的兩個查詢,並且在你的查詢中有(讀取:12,持續時間:0在我的查詢和讀取:16,持續時間:1),所以它對我來說是平等的。我總是用索引編寫查詢。 如果你沒有索引,你的查詢性能會更好,但是對於大量的行來說,表掃描是一個壞主意。 –

+0

這是[SQL小提琴沒有索引](http://sqlfiddle.com/#!6/0a8ae/4) –