0

以下のようなテーブルがあります。

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 と florida になります)。city1 列から 2 つの値を指定すると、結果は次のようになります。列city2から存在する場合、両方の共通値になります。

4

4 に答える 4

2

次の方法で実行できます。

select city2
from t
group by city2
having sum(city1 = 'Joe A') > 1 and
       sum(city1 = 'Jane B') > 1;
于 2013-08-22T01:25:24.223 に答える
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 値の間の City 名に対して自己結合を実行して、同様の都市がすべて返されるようにすることです。

提供されたデータを使用して

  • 日本はジョー A とジェーン B の日本にマップされ、制限基準のために保持されます。
  • Florida は、Joe A と Jane B の Florida にマップされ、制限基準のために保持されます。
  • California は California にマッピングされますが、Jane B と Joe A の制限基準が満たされていないため、結果から除外されます。

このメソッドを使用すると、都市だけでなく、City1 の値 (Jane B または Joe A) のテーブルから任意の値を返すことができます。

コメントから暗示されているように、セットの交差を表す内部結合の方法を使用します。

于 2013-08-22T01:26:21.450 に答える
1

あなたの例では、次のように結果を得ることができます:

 SELECT city2 
 FROM table
 WHERE city1 = "Joe A" or city1 = "Jane B"
 group by city2
 Having count(city1)>=2
于 2013-08-22T01:27:35.540 に答える