2015-07-02 4 views
0

Это не базовая иерархия родителей, а более сложная.Родительский ребенок с другим статусом

Ниже приведен пример данных:

id parent_id status 
----------------------- 
10   10  on 
11   10  off 
12   12  off 
13   13  on 

То, что я хочу, чтобы иметь автономные данные (ID 11 и 12). Моя проблема здесь заключается в том, что id 11 имеет родителя с статусом «on», который также следует принять.

Желаемый результат будет:

id parent_id status 
----------------------- 
10   10  on 
11   10  off 
12   12  off 

То, что я написал так тариф:

SELECT t1.id, t1,parent_id 
FROM t1 
LEFT JOIN t1 t11 ON t11.id = t1.parent_id 
WHERE ((t1.status = 'off' AND t11.status='off') 
     OR (t1.status = 'off' AND t11.status='on')) 
ORDER BY t1.parent_id, t1.id 

С помощью этого запроса я не строки с t1 и статусом t11 равных «на '(которые необходимы).

Выходной сигнал этого:

id parent_id status 
----------------------- 
(10)  (10) (on) -- missing row 
11   10  off 
12   12  off 

Как получить желаемый результат (таблица 2)?

+0

Почему бы вам просто не использовать 'WHERE t1.Status = 'off''? – Siyual

+0

Вам нужен только 1 уровень для родителя? – Amit

ответ

1

Вы близки, но неточны. Попробуйте следующее:

SELECT t1.id, t1,parent_id 
FROM t1 
LEFT JOIN t1 t11 ON t1.id = t11.parent_id 
WHERE t1.status = 'off' OR t11.status='off' 
ORDER BY t1.parent_id, t1.id 
+0

Большое спасибо! Это именно то, чего я хотел. – Kaymaz

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