2012-04-13 51 views
0

我有一個3字段的表。建議一個MySQL查詢

ID Name  ParentID  Active 
1  A  0   1 
2  B  0   1 
3  C  2   1 

現在,我想查詢,其中如果不存在具有ParentID> 0和活性,然後用它的父ID的行(2)被跳過行。

請建議單個MySQL查詢來實現此目的。

謝謝 Khuram

編輯:謝謝你們,終於解決並標明正確的答案。

+6

那你試試這麼遠嗎? – mcha 2012-04-13 10:50:45

+1

如果您從父行的角度重寫您的問題(應該省略),您將有一個合理的實施啓動。 – 2012-04-13 10:59:43

+0

相信我,我們很好地適應寫作的疑問,但是這個問題讓我頭痛不已。也許是MySQL案例> – Khuram 2012-04-13 11:00:45

回答

2

這應該工作:

select * from test where id not in (select parent_id from test where parent_id > 0 and active = 1); 
+0

謝謝,此作品 – Khuram 2012-04-13 11:42:05

+0

歡迎您! – frno 2012-04-13 13:20:53

1

也許是這樣的:

SELECT * FROM Table1 WHERE (NOT ParentID > 0 AND Active=1) OR Active=0 
+0

但如果第3行不活動,則應自動選擇第2行。 – Khuram 2012-04-13 11:01:31

+1

已更新答案 – Arion 2012-04-13 11:02:51

1

我不知道這個問題是很清楚的。你的意思是讀取所有行的ID不在父行中,其行是活動的?如果是這樣的:

SELECT * FROM mytable 
WHERE id NOT IN (
    SELECT ParentID FROM mytable WHERE Active = 1 
); 
+0

如果第3行處於活動狀態,則選擇1,3,如果第3行處於非活動狀態,則選擇1,2 – Khuram 2012-04-13 11:03:21

1
SELECT t1.* 
FROM tbl t1 
LEFT JOIN tbl t2 
    ON t1.ID = t2.ParentID 
    AND t2.Active = 1 
WHERE t2.id IS NULL