2017-04-07 5 views
1

私はmysqlデータベースに何かlike thisが必要です。sqlのセルフテーブルに親を取得する方法はありますか?

私はこの試みた:

SELECT parent.ID 
FROM mytable as child 
JOIN mytable as parent 
ON child.FIRST_REFERENCE = parent.ID 
WHERE parent.FIRST_REFERENCE = '-1' AND child.ID = '6' 
を私はたchildIDがルートを参照している場合たchildID、または子供と根を返す必要が

ID | FIRST_REFERENCE | description 
1 | -1    | root 
2 | 1    | other_child 
3 | -1    | root 
4 | 2    | child 
5 | 1    | other_child 
6 | 3    | child 

:から私の場合は

は、私が取得する必要があります

しかし、それは動作しません

そして、私は選択したケースで解決策を試しました:

SELECT 
    CASE FIRST_REFERENCE 
    WHEN '-1' THEN ID 
    ELSE SELECT rec.ID 
     FROM mytable as rec 
     WHERE rec.ID = main.FIRST_REFERENCE 
    END as 'root' 
    FROM mytable as main 
    WHERE childID = '6' 

ただし、構文エラーが発生します。

どこが間違っていますか?

+0

を? – etsa

+0

MySQLは残念ながらSQLサーバのような再帰的クエリをサポートしていません。 –

+0

あなたは見ることができます:http://guilhembichot.blogspot.it/2013/11/with-recursive-and-mysql.html – etsa

答えて

2

他の誰かが、私はsimleのLEFTで解決私の問題があります場合は、JOIN:どのバージョンのMySQL

SELECT CASE WHEN parent.ID is NULL THEN child.ID 
     ELSE parent.ID 
     END AS ID 
FROM my table AS child 
LEFT JOIN my table AS parent ON 
    ((parent.ID = child.FIRST_REFERENCE AND parent.FIRST_REFERENCE = '-1') OR 
    (child.FIRST_REFERENCE = '-1' AND parent.ID = NULL)) 
WHERE child.ID = '6' 
+0

あなたはCHILD.ID = 4のために何をしたいですか? – etsa

関連する問題