2013-08-22 41 views
0
id  | person | cities travelled | distance 

----------+---------+-------------+----------- 

1   | jack | japan    | 8 

2   | Joe | florida   | 11 

3   | Joe | california   | 215 

4   | Jane | ghana    | 3 

5   | Jane | florida   | 8 

6   | Joe | jakarta   | 11 

7   | Joe | california   | 215 

8   | Joe | japan    | 3 

对于两个给定的人“jane”和“joe”,我想找到他们旅行的共同城市。这是什么SQL查询。在这种情况下,我们可以看到,简和乔已经旅行的普通城市是'佛罗里达'。我如何在sql查询的帮助下找到它?mysql query为两个给定值选择相似列值的记录

回答

2

您可以group byhaving做到这一点:

select CitiesTravelled 
from t 
group by CitiesTravelled 
having sum(person = 'Joe') > 0 and 
     sum(person = 'Jane') > 0; 

通过将逻辑having子句中,你可以很容易地概括查询。下面是版本简乔:

select CitiesTravelled 
from t 
group by CitiesTravelled 
having sum(person = 'Joe') > 0 or 
     sum(person = 'Jane') > 0; 

这里是版本为简,乔走过的城市,和杰克:

select CitiesTravelled 
from t 
group by CitiesTravelled 
having sum(person = 'Joe') > 0 and 
     sum(person = 'Jane') > 0 and 
     sum(person = 'Jack') > 0; 

编辑:

如果你想添加行驶距离,您可以将select更改为类似:

select CitiesTravelled, min(DistanceTravelled) 
select CitiesTravelled, avg(DistanceTravelled) 
select CitiesTravelled, max(case when person = 'Jane' then DistanceTravelled end) 
+0

问题是我得到这些城市旅行,但不同的记录。所以当我通过选择查询来获取距离时,我会得到不同的距离。无法定制您的查询以获取距离他所在城市的第一人的距离 – user2705577

0
select CitiesTravelled 
from t 
where person = 'Joe' 
and CitiesTravelled in (
    select CitiesTravelled 
    from t 
    where person = 'Jane' 
); 

select CitiesTravelled 
from t t1 
where person = 'Joe' 
and exists (
    select t2.CitiesTravelled 
    from t t2 
    where t2.person = 'Jane' 
    and t2.CitiesTravelled = t1.CitiesTravelled 
); 
相关问题