mysql查询用于选择具有相同对应列值的那两个列值

时间:2013-08-22 01:07:59

标签: mysql

我有一张如下表所示的表格。

id        | city1   | city2       | distance
----------+---------+-------------+-----------
1         | Jane B  | japan       | 8
2         | Joe A   | florida     | 11 
3         | Joe F   | california  | 215 
4         | Jane A  | ghana       | 3
5         | Jane B  | florida     | 8
6         | Joe C   | jakarta     | 11 
7         | Joe F   | california  | 215 
8         | Joe A   | japan       | 3

假如我想为jow A和jane B找到常见的city2,我怎么能在mysql中检索它。(在这种情况下结果将是japan和佛罗里达)。如果我从city1列提供两个值,结果如果存在于city city 2中,则它们都是两者的共同值。

4 个答案:

答案 0 :(得分:2)

你可以这样做:

select city2
from t
group by city2
having sum(city1 = 'Joe A') > 1 and
       sum(city1 = 'Jane B') > 1;

答案 1 :(得分:1)

Select a.ID, a.City1, a.City2, a.distance
FROM table A
INNER JOIN table B on A.City2 = B.City2
AND A.City1 = 'JANE B' and B.City1 = 'Joe A'

这里的目的是在两个City2值之间的城市名称上执行自联接,以便返回所有类似的城市,但前提是city1和city2是感兴趣的值。

所以使用提供的数据

  • 日本将为Joe A和Jane B制作日本地图,并由于限制标准而被保留
  • 佛罗里达州将映射到佛罗里达州的Joe A和Jane B,并由于限制标准而被保留
  • 加利福尼亚州将映射到加利福尼亚......但由于Jane B和Joe A的限制标准未得到满足,因此 将从结果中排除。

此方法使您能够从表中返回City1(Jane B或Joe A)的任何值,而不仅仅是城市。

它使用内部连接的方法,它表示注释中所需的集合的交集。

答案 2 :(得分:1)

对于您的示例,您可以通过这种方式获得结果:

 SELECT city2 
 FROM table
 WHERE city1 = "Joe A" or city1 = "Jane B"
 group by city2
 Having count(city1)>=2

答案 3 :(得分:0)

根据您的数据分布,子查询可能有所帮助,或者至少看起来更清晰。

select A.city2
from 
(
    select distinct city2
    from t
    where t.city1 = 'Joe A'
) A
inner join 
(
    select distinct city2
    from t
    where t.city1 = 'Jane B'
) B
on A.city2 = B.city2