Başka bir tabloya göre filtreleme duplicities

1 Cevap php

Ben iki (örnek) tablo var burada A) data_table:

+----------+-------+
| location | value |
+----------+-------+
|       43 | 38    | 
|       44 | 31    | 
|        3 | 31    | 
|       11 | 38    | 
|       47 | 35    | 
|       49 | 31    | 
|       50 | 31    | 
|       55 | 16    | 
|       56 | 16    | 
|       59 | 35    | 
|       42 | 35    | 
+----------+-------+

ve B) neighbour_table:

+-----------+-----------+
| location1 | location2 |
+-----------+-----------+
|        43 |         3 | 
|        43 |        11 | 
|        43 |        55 | 
|         3 |        50 | 
|         3 |        16 | 
|        49 |        56 | 
|        49 |        42 | 
+-----------+-----------+

Ben locations ile aynı value olarak komşu en az birine sahiptir seçmek istiyorum. (Performansa göre) bunu yapmanın en iyi yolu nedir?

Şimdiye kadar bu çalıştı:

1) tabloda birden fazla mevcut değerine sahip tüm yerlerinizi seçin:

SELECT location,value FROM data_table 
WHERE value IN 
(SELECT value FROM data_table GROUP BY value HAVING COUNT(value) > 1);

2) Şimdi neighbour_table kullanarak sonuç filtrelemek istiyorum, ama nasıl olur? Kullanma JOIN? Veya başka bir türetilmiş tablo (sorgu)?

Ben işi yapmak için PHP kullanarak, ama nasıl performansı hakkında düşünmek? Eğer varsa zaten ben SQL çözüm görmek istiyoruz.

Şimdiden teşekkürler

1 Cevap

Sen join hem de komşuları için bir değeri aramak için bir kullanabilirsiniz. Sonra bir where tümcesini kullanarak aynı değere sahip komşular seçebilirsiniz:

select     n.*
from       neighbour_table n
join       data_table d1
on         d1.location = n.location1
join       data_table d2
on         d2.location = n.location2
where      d1.value = d2.value