2012-04-13 54 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