2017-08-07 222 views
0

鑑於表sql語句選擇

station table 
id | name 
1 | Train A 
2 | Train B 
3 | Train C 
4 | Train D 

國表

id | name 
1 | country A 
2 | country B 
3 | country c 
4 | country D 

trainCountry表

idTrain | idCity 
1  | 1 
1  | 2 
1  | 4 
2  | 1 
2  | 4 
3  | 2 
3  | 3 
3  | 4 
4  | 1 
4  | 2 
4  | 3 
4  | 4 

thiere許多列車和許多國家,並且有4對列車將傳遞給每國家。每列火車都有自己的路線,例如列車A可以從A國通過B到C國。列車B只能從A國通過B國。我需要從B國到C國只具有路徑火車這是火車C和D.訓練我 嘗試了用這條SQL語句,但我沒有得到正確的記錄:

select * 
from cityTrain ct 
where ct.idC = (select id from city c where c.id = 2 OR c.id = 3) 
+1

使用該表數據,預期結果是什麼? (請提供格式文本。) – jarlh

+0

thiere是許多火車和許多國家,並且有4列火車將傳遞到每個國家。每列火車都有自己的路線,例如列車A可以從A國通過B到C國。列車B只能從A國通過B國。我需要得到只有從B國到C國的列車C,列車C和列車D – Mostafa

+0

嘿,編輯你的問題,並指定結果集! – jarlh

回答

1

一種方法是使用group by和having:

SELECT idTrain 
FROM trainCountry 
WHERE idCity IN (2,3) 
GROUP BY idTrain 
HAVING COUNT(DISTINCT idCity) = 2 

這將讓你所有經過在城市2和3

另一種方法是使用存在列車:

SELECT idTrain 
FROM trainCountry t0 
WHERE idCity = 2 
AND EXISTS 
(
    SELECT 1 
    FROM trainCountry t1 
    WHERE t0.idTrain = t1.idTrain 
    AND idCity = 3 
) 
+0

correct,but what does(HAVING COUNT( DISTINCT idCity)= 2)的確如此? – Mostafa

+0

having子句過濾聚合結果。 count(distinct idCity)= 2意味着已經找到兩個城市。 –

+0

好的很好,謝謝 – Mostafa

1
select idTrain from traincountry where idCity=2 
intersect 
select idTrain from traincountry where idCity=3