过滤另一个表的重复项

时间:2010-02-05 15:13:20

标签: php sql mysql database performance

我这里有两个(示例)表格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解决方案,如果有的话。

提前致谢

1 个答案:

答案 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