mysql查询,用于为两个给定值选择类似列值的记录

时间:2013-08-22 11:03:17

标签: mysql

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

对于两个给定的人“简”和“乔”,我想找到他们旅行的共同城市。什么是sql查询。在这种情况下,我们可以看到珍妮和乔都走过的普通城市是“佛罗里达”。如何在sql查询的帮助下找到它?

2 个答案:

答案 0 :(得分:2)

您可以使用group byhaving

执行此操作
select CitiesTravelled
from t
group by CitiesTravelled
having sum(person = 'Joe') > 0 and
       sum(person = 'Jane') > 0;

通过将逻辑放在having子句中,您可以轻松地概括查询。以下是Jane Joe的版本:

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

以下是Jane,Joe和Jack旅行的城市版本:

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)

答案 1 :(得分: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
);