因此,這裏是你的測試數據:
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關鍵字,這是破壞查詢的最後一個手段。
來源
2011-05-11 18:25:36
APC
您需要詳細說明。我已經多次閱讀這個問題和你的例子,但仍然不知道你在問什麼。什麼是「兒童名單」?什麼定義了這個孩子? – cmutt78 2011-05-11 18:14:42
grp#和父母#跟隨子女 - 父母關係。 10是30的父親,即30是10的孩子。所以如果我們查詢id = 0和grp#= 10,我們需要返回30和US。如果我們查詢id = 0和grp#= 30,我們需要返回NULL和SF。 – kate 2011-05-11 18:18:05