2016-03-02 95 views
0

我试图从一个表中选择值,其中多于而不是另一个表中特定属性的一个不同值。MySQL查询 - 查找有多个不同值的所有记录

我觉得应该是这样的,但我似乎无法得到它的工作:

SELECT * value1 
FROM table1 
JOIN table2 ON table1.id=table2.id 
HAVING COUNT(DISTINCT value2) > 1 

OK,例如:

table1  table2 
id name  id hobby 
1  a  1  x 
2  b  1  x 
3  c  3  y 
4  d  4  z 

所以我想选择所有名称都有一个以上的爱好(在这种情况下,名称为a)。

我很欣赏这不是完全规范化的,而且非常简化,但我似乎无法弄清楚如何在SQL中为另一个值表示'多次出现'的值。

+0

value2在表1中? – zee

+0

不,值2在表2上 –

回答

0

尝试用GROUP BY子句:

SELECT * value1 
FROM table1 
JOIN table2 ON table1.id=table2.id 
Group By table1.id 
HAVING COUNT(DISTINCT value2) > 1 

在评论还有人说,是表1表2或值2的一部分?

0

由于我们不知道表格的确切结构......这是我最好的猜测。请测试它并让我知道。

select *  
    From table1 a , (select id , value2 from table2 
    Group By id , value2 HAVING COUNT(value2) > 1) b 
    where a.id = b.id1 
0

IMO你最好使用以下策略:

  1. 查找数据从table2 JOIN table1
  2. 从#1套,计算value2出现的每对夫妇value2/id
  3. 最后只保留记录,这些发生> 1

所以,你可以试试这个:

SELECT T2.COUNT(*) AS `count`, T2.value2, T1.* 
FROM table2 T2 
    JOIN table1 T1 ON T1.id = T2.id 
GROUP BY T2.value2, T2.id 
WHERE `count` > 1 

BTW注意,我并没有包括有关value1什么,因为我没有看到,不仅是如何能在您的问题参与,也可能是什么表示它在查询示例中的显示方式。