我的数据库中有以下表格:
id grp# code parent#
-- ---- ---- -------
0 10 US NULL
0 30 SF 10
1 10 S NULL
1 30 SF 10
由此,给定一个id和grp#我需要返回子项列表和grp#的代码。如果子元素不存在,则应返回NULL。
所以例如:对于id = 0,grp#= 10它应该返回US,30并且对于id = 0,grp#= 30它应该返回SF,NULL
注意:输出中不应有重复项。
答案 0 :(得分:2)
所以这是你的测试数据:
SQL> select * from t42
2 /
ID GRP# CODE PARENT#
---------- ---------- -------------------- ----------
0 10 US
0 30 SF 10
1 10 S
1 30 SF 10
SQL>
这是一个返回所需结果的查询:
SQL> select p.code
2 , c.grp# as child_grp#
3 from t42 p
4 left outer join t42 c
5 on ( c.parent# = p.grp# )
6 where p.id = &id
7 and p.grp# = &grp
8 /
Enter value for id: 0
old 6: where p.id = &id
new 6: where p.id = 0
Enter value for grp: 10
old 7: and p.grp# = &grp
new 7: and p.grp# = 10
CODE CHILD_GRP#
-------------------- ----------
US 30
US 30
SQL> r
1 select p.code
2 , c.grp# as child_grp#
3 from t42 p
4 left outer join t42 c
5 on ( c.parent# = p.grp# )
6 where p.id = &id
7* and p.grp# = &grp
Enter value for id: 0
old 6: where p.id = &id
new 6: where p.id = 0
Enter value for grp: 30
old 7: and p.grp# = &grp
new 7: and p.grp# = 30
CODE CHILD_GRP#
-------------------- ----------
SF
SQL>
“我们可以重写查询以返回单行而不是 重复?“
当然 - 前提是您可以指定其他业务规则。
简单的方法是部署DISTINCT关键字,这是破解查询的最后手段。