Sql语句选择

时间:2017-08-07 07:16:55

标签: sql sql-server

给出表格

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 table

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
许多列车和许多国家都有很多列车,每个国家都有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)

2 个答案:

答案 0 :(得分:1)

一种方法是使用group by和:

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

这将为您提供通过城市2和3的所有列车。

另一种方法是使用exists:

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

答案 1 :(得分:1)

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