2014-09-10 52 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'))中的狀態;