sql >> データベース >  >> RDS >> PostgreSQL

階層データへのXPathクエリ、祖先と子孫の関係を維持

    これを試してください:

    SELECT (xpath('./@name', parrot.node))[1] AS name
         , unnest(xpath('./descriptor/text()', parrot.node)) AS descriptor
    FROM  (             
       SELECT unnest(xpath('./parrot', parrot_xml.document)) AS node
       FROM   parrot_xml
       ) parrot;
    

    要求された出力を正確に生成します。

    まず、サブクエリで、オウムノード全体を取得します。行ごとに1つのノード。

    次に、xpath()を使用して名前と記述子を取得します。どちらも配列です。 nameの最初の(そして唯一の)要素を取ります descriptorを分割します `unnest()を使用して配列を作成し、目的の結果を取得します。

    関連する質問に対する包括的な回答 を作成しました 近々。興味があるかもしれません。




    1. mysqlUPDATEはINSERTINTOよりも高速ですか?

    2. PostgreSQLクエリをログに記録する方法は?

    3. 必要な属性を持つ製品を入手する

    4. 日付データ型のEquals(=)とLIKE