我有一张如下表所示的表格。
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中,则它们都是两者的共同值。
答案 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是感兴趣的值。
所以使用提供的数据
此方法使您能够从表中返回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