我这里有两个(示例)表格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 |
+----------+-------+
和B)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);
。最好的方法是什么(根据表现)?
到目前为止,我试过这个:
1)选择表格中出现多次值的所有位置:
neighbour_table
2)现在我想使用JOIN
过滤结果,但是如何?使用{{1}}?还是另一个派生表(子查询)?
我考虑使用PHP来完成这项工作,但性能如何呢?无论如何,我希望看到SQL解决方案,如果有的话。
提前致谢
答案 0 :(得分:1)
您可以使用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