Фильтрация дубликатов по другой таблице - PullRequest
2 голосов
/ 05 февраля 2010

У меня есть две (пример) таблицы здесь 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    | 
+----------+-------+

и Б) neighbour_table:

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

Я бы хотел выбрать locations с тем же value, как и у одного из соседей. Каков наилучший способ сделать это (в зависимости от производительности)?

Пока я пробовал это:

1) Выберите все местоположения со значением, которое присутствует в таблице более одного раза:

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

2) Теперь я хотел бы отфильтровать результат, используя neighbour_table, но как? Используя JOIN? Или другая производная таблица (подзапрос)?

Я думаю об использовании PHP для выполнения работы, но как насчет производительности? В любом случае, я хотел бы увидеть решение SQL, если оно есть.

Заранее спасибо

1 Ответ

1 голос
/ 05 февраля 2010

Вы можете использовать join, чтобы найти значение для обоих соседей. Затем вы можете выбрать соседей с одинаковым значением, используя предложение where:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...