2013-08-22 97 views
0

我有一张如下所示的表格。用于选择具有相同列值的那两列值的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 

假设,如果我想找到宙A和简B公共城2,我怎么能在mysql中检索此。(结果将是日本和佛罗里达州在这种情况下)。如果我提供了从city1两个值列,如果列city2存在,则结果成为两者的共同值。

+0

我不确定你在问什么。你想要city1是“Joe A”还是“Jane B”的唯一行?如果是这样,'SELECT DISTINCT city2 FROM your_table_name WHERE city1 ='Joe A'OR city1 ='Jane B';' – rutter

+0

假设A住在美国,印度,日本和澳大利亚,B住在印度,加纳,斐济和澳大利亚。如果我想知道A和B共同居住在哪个城市(十字路口)。 – user2705577

回答

2

你可以这样来做:

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

谢谢诀窍 – user2705577

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' 

这里的意图是执行自连接两个城2值之间的城市的名字,所有的城市一样返回,但只有当city1和city2是有兴趣的值。

因此,使用所提供的数据

  • 日本将映射到日本乔A和简B和由于被保持到限制标准
  • 佛罗里达将映射到佛罗里达乔A和简B和是由于限制标准而保留
  • 加利福尼亚州将映射到加利福尼亚...但由于Jane B和Joe A的限制标准未得到满足,因此 将被排除在结果之外。

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

它使用本身内部联接的方法,它表示从注释中隐含所需的集合的交集。

+0

简短的解释会改善这个答案。 – Blorgbeard

+0

@Blorgbeard补充说明。 – xQbert

1

对于你的榜样,你可以有你的结果是这样的:

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

这意味着你不得不知道有多少城市会匹配?所以如果只有一个Joe A和Jane B分享的城市,是不是不能返回那个路口? – xQbert

+0

如果count(city1)> = 2,这意味着joe A和Jane B都拥有这个city2的共同点。 –

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 
相关问题