2013-08-22 98 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 
相關問題