0
は、のは、それは次のようになりましょう:current
ためトラブル私はテーブルを持っている
c | p
=====
|1|3|
|2|1|
|7|5|
c
スタンドと2
Iのc
値が与えられparent
ためp
スタンド親を持たない最上位の祖先を返します。この値は3
です。これは自己参照テーブルなので、CTEを使うのが最良の方法だと思っていましたが、私はそれを使うのが初めてです。
WITH Tree(this, parent) AS
(SELECT c ,p
FROM myTable
WHERE c = '2'
UNION ALL
SELECT M.c ,M.p
FROM myTable M
JOIN Tree T ON T.parent = M.c)
SELECT parent
FROM Tree
は、しかし、これが返されます: 1
3
は私だけしかし3
をしたいそれにもかかわらず、私はそれに打撃を与えました。私はWHERE T.parent <> M.c
を入れてみましたが、それは完全に意味をなさない。一言で言えば、私は少し祖父母を隔離する方法についてちょっと混乱しています。
あなたは常にgradparentを返すか、一番上の祖先に戻したいですか?前者は2つの結合で行うことができ、後者は再帰的なcteのような手法をとるためです。また、トップの親は常に実際にテーブルのレコードを持っていますか? – Matt
@Mattご清聴ありがとうございました...一番上の祖先は私が後にしたものであり、一番上の祖先は親を持たないでしょう。私は私の質問を更新します。 – 40Alpha
私は彼らが親を持っていないだろうが、私はまだ物語の記録があるかどうか疑問に思っています。子3、親NULL? – Matt