2014-09-10 54 views
0

分组值的ID我有一个表查找不同的外键在MySQL

process用的Fileds idfk_objectstatus

例如

id| fk_object | status 
---------------------- 
1 | 3   | true 
2 | 3   | true 
3 | 9   | false 
4 | 9   | true 
5 | 9   | true 
6 | 8   | false 
7 | 8   | false 

我想找到id S其中不同status存在通过fk_object分组的所有行。

在这个例子中,它应该返回的id小号3, 4, 5,因为对于fk_object9有现有statustruefalse和其他只有它的一个。

+1

确定。那么到目前为止你尝试过了什么? – 2014-09-10 14:06:26

+1

IN('true','false')... GROUP BY x HAVING COUNT(DISTINCT status)= 2; – Strawberry 2014-09-10 14:07:00

+0

@Strawberry:谢谢。这工作得很好。如果您发布答案,我会接受它。 – Simulant 2014-09-10 14:16:05

回答

1

该股答复如下...

SELECT ... FROM ... WHERE ... IN ('true','false')... GROUP BY ... HAVING COUNT(DISTINCT status) = 2; 

其中 '2' 是等于参数在IN()的数目

2

这得到与属性fk_object值:

select fk_object 
from process 
group by fk_object 
having min(status) <> max(status); 

您可以通过使用join获得相应的行:

select p.* 
from process p join 
    (select fk_object 
     from process 
     group by fk_object 
     having min(status) <> max(status) 
    ) pmax 
    on p.fk_object = pmax.fk_object; 
+0

他想要的ID。 – 2014-09-10 14:07:51

+1

这会给他整行,实际上应该有它们的id。 – SamHuckaby 2014-09-10 14:09:23

+0

@Gordon Linoff:谢谢你的帮助。但我得到一个语法错误:在两个查询中出现意外。 MySQL 5.2.3 – Simulant 2014-09-10 14:11:41

1

选择ID从过程,其中FK =(选择过程FK ('true','false'))中的状态;