2014-09-10 5 views
0

У меня есть таблицаНайти идентификаторы различающиеся значения, сгруппированные по внешнему ключу в MySQL

process с fileds id, fk_object и status.

пример

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 s 3, 4, 5, потому что для fk_object9 там существующего status с true и false, а другой только один из них.

+1

OK. Итак, что вы пробовали до сих пор? –

+1

IN ('true', 'false') ... GROUP BY x HOWING COUNT (DISTINCT status) = 2; – Strawberry

+0

@Strawberry: Спасибо. Это работает достаточно хорошо. Если вы опубликуете ответ, я приму его. – Simulant

ответ

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. –

+1

Это даст ему целые строки, которые должны иметь на них идентификатор. – SamHuckaby

+0

@ Gordon Linoff: Спасибо, что обратились за помощью. Но я получаю синтаксис Ошибка: неожиданно, где в обоих запросах. MySQL 5.2.3 – Simulant

1

Выберите идентификатор из процесса, где FK = (выберите FK из процесса где status in ('true', 'false'));

Смежные вопросы