1
xml形式を作成してストアドプロシージャの入力に使用できるようにしたいが、結果がselectクエリの結果であるということは、私が期待している出力ではない。これで私を助けてくれますか?postgre sqlでxml入力を使用した場合の値の不一致
WITH test_xml(data) AS (VALUES
('<ROOT>
<record Modelid="1" ModelName="Paul" description="abc" Productid="1" Modelprice="120987">
<record variationid="20" VariationName="1abc" Variationimage="1abc" variationdesc="1variationdesc">
<item layerid="11" layeris="layer1.js"></item>
<item layerid="12" layeris="layer2.js"></item>
</record>
<record variationid="21" VariationName="2abc" Variationimage="2abc" variationdesc="2variationdesc">
<item layerid="13" layeris="layer3.js"></item>
<item layerid="14" layeris="layer4.js"></item>
</record>
</record>
</ROOT>'::XML)
)
SELECT unnest((xpath('//record/@Modelid', test_xml.data))) as Modelid ,
unnest((xpath('//record/record/@variationid', test_xml.data))) as variationid,
unnest((xpath('//record/record/item/@layerid', test_xml.data))) as layerid
FROM test_xml
出力は次のとおりです。
modelid variationid layerid 1 20 11 1 21 12 1 20 13 1 21 14
が、まさに私が欲しいもの
modelid variationid layerid 1 20 11 1 20 12 1 21 13 1 21 14
ありがとうございました.....しかし、私はこの関数を理解できませんでした... – pavithra
'LATERAL'について説明しています(https://www.postgresql.org/docs/current/static/ queries-table-expressions.html#QUERIES-LATERAL) - それは、後の 'FROM'リストのエントリが以前のものを参照できることを意味します。そのため、このクエリは各モデルをそのすべての評価とそのすべてのレイヤーに対する各バリエーションに結合します。そして、それぞれのデータが抽出される。あなたの質問の問題は、副選択によって返されたリストの間に接続がないということでした。 –
ありがとうございますが、結果を得る他の方法はありますか? – pavithra