我一定不能使用正确的Google foo来找到正确的答案。
我的表格如下所示:
ID父级状态名称
1 NULL 0 Root
2 1 0 Group 1
3 6 400 WINXP32
4 2 400 WIN7
5 2 400 WIN2K8
6 1 0组2
'name'列包含组名和机器名。群组的“状态”为0。 如何创建一个SQL语句来显示(不是修改数据库)一个名为'Group'的列,这个列基于'Parent'列保存其父ID的'ID'的逻辑。
不知怎的,我可以弄清楚如何从其他表中加入数据,但我无法弄明白......
- 更新:我忘了展示我正在寻找的输出示例,在一个完美的世界中我会得到以下内容..
ID |集团|状态|名称
3 |第2组| 400 | WINXP32
4 |第1组| 400 | WIN7
5 |第1组| 400 | WIN2K8
我会(我认为)通过执行where status>从输出中过滤出组。 0
感谢大家的快速反馈!
答案 0 :(得分:1)
试试这个
SELECT ID,
CASE WHEN STATUS = 0 THEN (SELECT Root WHERE Parent = ID)
END [Group]
Status,
Name
FROM TABLE1
WHERE STATUS <> 0
答案 1 :(得分:0)
你的意思是这样的(自我加入SQL标准)?
如果您的父ID可能缺失记录:
select t1.name,
t2.name as "Group"
from tab t1
left join tab t2
on t1.parent = t2.id
where t1.status > 0;
如果始终存在父ID,则可以使用内部联接:
select t1.name,
t2.name as "Group"
from tab t1, tab t2
where t1.parent = t2.id
and t1.status > 0;
否则,请你解释一下你需要什么?
答案 2 :(得分:0)
我认为你的主要问题是两次使用同一个表。这是通过使用Corrado Piola解释的不同别名来实现的。
select t1.name, t2.name from mytab t1, mytab t2 where ...
现在t1和t2表现得像不同的表。
答案 3 :(得分:0)
Select
m.id,g.Name,m.Status,m.Name
from
table1 M,
table2 G
where
m.Status >0
and g.Status = 0
and m.Parent = g.id