親子関係のSQLクエリ

ミンハズ

以下のテーブルにSQLクエリを書き込もうとしています。

╔════╦══════════╦═══════╗======╗======╗
║ ID ║   NAME   ║ CLASS ║PARENT║ DOB  ║
╠════╬══════════╬═══════╣======║======║
║ 1  ║   DAVID  ║ SPIN  ║      ║1     ║
║ 2  ║   AROON  ║ BIKE  ║ 1    ║1     ║
║ 3  ║   LEO    ║ YOGA  ║      ║2     ║
║ 4  ║   LIN    ║ CYC   ║ 1    ║2     ║
║ 5  ║   STEFA  ║ YOGA  ║      ║3     ║
║ 6  ║   GLORIA ║ RUNN  ║ 1    ║3     ║
╚════╩══════════╩═══════╝======╝======╝

また、このテーブルの出力は次のようになります。

╔════╦════════╦═══════╗======╗======╗
║ ID ║ NAME   ║ CLASS ║PARENT║ DOB  ║
╠════╬════════╬═══════╣======║======║
║ 1  ║  DAVID ║ SPIN  ║      ║1     ║
║ 2  ║  AROON ║ BIKE  ║ 1    ║1     ║
║ 4  ║  LIN   ║ CYC   ║ 1    ║2     ║
║ 6  ║  GLORIA║ RUNN  ║ 1    ║3     ║
║ 3  ║  LEO   ║ YOGA  ║      ║2     ║
║ 5  ║  STEFAN║ YOGA  ║      ║3     ║
╚════╩════════╩═══════╝======╝======╝

So this is the explanation of the output
First parent David as his DOB is 1, 
--David three childrens sorted based on DOB
Then LEO as his DOB is 2
-- Leo do not have children[if he did, would be here as sorted on DOB] 
Then Stefan as his DOB is 3
--  Stefan do not have children [if he did, would be here as sorted on DOB] 

だから私は何を試しましたか?

SELECT * FROM user group by ID, PARENT ;

SQLの上では、ステートメントは親子グループのアイテムを返しますが、順序を維持しません。追加するとORDER BYSQLGROUPBYを尊重しているようには見えません。

次に、結合を実行して、2つの完全に異なるテーブルで終了しようとしました。一方にはすべての親が含まれ、もう一方にはすべての子が含まれています。UNION ALLその2つのクエリで、期待されるデータセットが返されましたが、期待される順序ではありませんでした。

何かご意見は?

更新

Output should be
Pick entry [based on min time ].  
--use that id and find all of its children and placed them in sorted order
repeat for every row in the table

注意:

--parents are sorted based on DOB
--child's are also sorted based on DOB 
--DOB are valid timestamp 
--PARENT, ID field both are UUID and define as CHAR, PARENT reference to ID

SQLフィドル

SOでも同様

アップデート1

以下のクエリ

WITH RECURSIVE
top AS (
    SELECT * FROM (SELECT * FROM user WHERE PARENT is null ORDER BY dob LIMIT 1) 
    UNION
    SELECT user.NAME, user.PARENT, user.ID, user.CLASS, user.DOB FROM user, top WHERE user.PARENT=top.ID 
    ORDER BY user.dob
  ) SELECT * FROM top;

次の出力を返します:

╔════╦════════╦═══════╗======╗======╗
║ ID ║ NAME   ║ CLASS ║PARENT║ DOB  ║
╠════╬════════╬═══════╣======║======║
║ 1  ║  DAVID ║ SPIN  ║      ║1     ║
║ 2  ║  AROON ║ BIKE  ║ 1    ║1     ║
║ 4  ║  LIN   ║ CYC   ║ 1    ║2     ║
║ 5  ║  GLORIA║ RUNN  ║ 1    ║3     ║
╚════╩════════╩═══════╝======╝======╝

出力は最初の親に適しています。しかし、それでも理解できませんでした。残りの親とその子を並べ替えた順序で繰り返すにはどうすればよいですか。

スティーブチェンバーズ

クエリ

SELECT u1.*
FROM `user` u1
LEFT JOIN `user` u2
ON u1.PARENT = u2.ID
ORDER BY CASE WHEN u1.PARENT IS NULL THEN u1.DOB ELSE u2.DOB END
      || CASE WHEN u1.PARENT IS NULL THEN '' ELSE u1.DOB END;

説明

  1. エイリアスにu1はすべてのユーザーの詳細があります
  2. エイリアスにu2は、該当する場合、親の詳細があります。(ALEFT JOINが使用されるためnullu1ユーザーに親がいない場合、これらの詳細はすべてになります。)
  3. ユーザーに親がいない場合は、DOBを単独で使用して注文します。
  4. ユーザーに親がある場合は、ユーザーの親のDOBを取得し、ユーザー(子)のDOBを連結(追加)します。

結果

以前に作成された値ORDER BY(実際には必要ありませんSELECTは、ここの右端の列のようになります。

╔════╦════════╦═══════╗======╗======╦════════╗
║ ID ║ NAME   ║ CLASS ║PARENT║ DOB  ║ORDER BY║
╠════╬════════╬═══════╣======║======╬════════║
║ 1  ║  DAVID ║ SPIN  ║      ║1     ║ 1      ║
║ 2  ║  AROON ║ BIKE  ║ 1    ║1     ║ 11     ║
║ 4  ║  LIN   ║ CYC   ║ 1    ║2     ║ 12     ║
║ 6  ║  GLORIA║ RUNN  ║ 1    ║3     ║ 13     ║
║ 3  ║  LEO   ║ YOGA  ║      ║2     ║ 2      ║
║ 5  ║  STEFAN║ YOGA  ║      ║3     ║ 3      ║
╚════╩════════╩═══════╝======╝======╩════════╝

デモ

SQL FiddleDemoを参照してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

親子関係を持つLinqからSQLへのクエリ

分類Dev

mysqlクエリの子の親の関係

分類Dev

単一テーブルの親子関係クエリ

分類Dev

親子データ関係のカウントをフェッチするSQLクエリ

分類Dev

親子関係クエリへのmysqlバインディング

分類Dev

子と親の関係を持つsolrjクエリが失敗する

分類Dev

C#クラスの親子関係

分類Dev

Pythonの親子関係クラス

分類Dev

親子クラスの関係-indexOf

分類Dev

親子関係のあるコメントの階層クエリを注文しますか?

分類Dev

親子関係のテーブルの値を集計および更新するSparkクエリ

分類Dev

1:N関係のSQLクエリ

分類Dev

単純だが非効率的な親子関係クエリを改善する方法

分類Dev

Mavenの親子関係

分類Dev

SceneKitのSCNNode親子関係?

分類Dev

WPFMVVMの親子関係

分類Dev

SQLServerの親子関係

分類Dev

MS Access の親子関係

分類Dev

角度4の親子関係

分類Dev

親子関係階層(複数の子)-SQL Server

分類Dev

特定の親の子の平均を取得するSQLクエリ

分類Dev

Laravelクエリの関係

分類Dev

Mongoidhas_many関係での親オブジェクトのクエリ

分類Dev

特定のJSON形式の親子をSQLクエリする方法は?

分類Dev

SQL親子テーブルクエリ

分類Dev

SQLで条件付きの親子関係を削除する方法

分類Dev

SQLで親子関係を照会する

分類Dev

親子関係-TSQL

分類Dev

1対多の関係でdjangoの親と子をクエリするにはどうすればよいですか?