[解決済み] MySQLで再帰的SELECTクエリを行うには?
2023-07-01 08:32:46
質問
以下のような表ができました。
col1 | col2 | col3
-----+------+-------
1 | a | 5
5 | d | 3
3 | k | 7
6 | o | 2
2 | 0 | 8
ユーザーが "1" を検索した場合、プログラムは
col1
にある値を取得します。
col3
にある値を取得します。
col1
で "3"を取得します。
col3
などと表示されます。それでプリントアウトされます。
1 | a | 5
5 | d | 3
3 | k | 7
ユーザーが "6"を検索すると、出力されます。
6 | o | 2
2 | 0 | 8
を構築する方法
SELECT
クエリを作成するにはどうしたらよいでしょうか?
どのように解決するには?
編集
左クリックベンさん(@leftclickben)の解決策も有効です。 また、同じようにストアドプロシージャを使用することもできます。
CREATE PROCEDURE get_tree(IN id int)
BEGIN
DECLARE child_id int;
DECLARE prev_id int;
SET prev_id = id;
SET child_id=0;
SELECT col3 into child_id
FROM table1 WHERE col1=id ;
create TEMPORARY table IF NOT EXISTS temp_table as (select * from table1 where 1=0);
truncate table temp_table;
WHILE child_id <> 0 DO
insert into temp_table select * from table1 WHERE col1=prev_id;
SET prev_id = child_id;
SET child_id=0;
SELECT col3 into child_id
FROM TABLE1 WHERE col1=prev_id;
END WHILE;
select * from temp_table;
END //
私たちは、出力結果を保存するために一時テーブルを使用しています。一時テーブルはセッションベースなので、出力データが正しくないという問題は発生しないでしょう。
<ストライクSELECT
col1, col2, @pv := col3 as 'col3'
FROM
table1
JOIN
(SELECT @pv := 1) tmp
WHERE
col1 = @pv
SQL FIDDLE Demo
:
| COL1 | COL2 | COL3 |
+------+------+------+
| 1 | a | 5 |
| 5 | d | 3 |
| 3 | k | 7 |
ノート
parent_id
の値より小さくする必要があります。
child_id
よりも小さい必要があります。
関連
-
[解決済み】ValueError: 値の長さがインデックスの長さと一致しない|Pandas DataFrame.unique()
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] 各GROUP BYグループの最初の行を選択しますか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] MySQL - SELECTクエリに基づくUPDATEクエリ
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLはこのようなUpdateステートメントを書くべきではありません
-
[解決済み] datetimeの挿入時に文字列から日付や時刻を変換すると、変換に失敗する
-
[解決済み】ValueError: 値の長さがインデックスの長さと一致しない|Pandas DataFrame.unique()
-
mysql5.7のインストールと、無料・長期利用を目的としたNavicateの導入プロセスについて
-
sql エラーを解決する オペランドには1つの列が含まれている必要があります。
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
Mysqlデータベースへのリンク時にpymysqlがConnection refusedエラーを報告する
-
[解決済み] 1つのSQLクエリで複数のカウントを取得する方法は?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新