2017-08-07 143 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