元の質問とコードを参照してください。動作するコードは次のとおりです。
SELECT v1.s_owner_guid,
n.node_name as s_owner_name
FROM vm_list v
CROSS JOIN LATERAL (
SELECT (VALUES (TRIM(split_part(v2.set_of_guids, ':', 3), '|')))
) v1(s_owner_guid)
LEFT JOIN nodes n
ON n.id = v1.s_owner_guid::uuid
動作しない元のコード:
SELECT
(TRIM (split_part(v2.set_of_guids, ':', 3)), '|') AS s_owner_guid
, n1.node_name as s_owner_name
FROM vm_list as v2
INNER JOIN nodes
AS n1
ON n1.id=s_owner_guid
この SELECT から s_owner_guid と s_owner_name を取得したい
これは私が問題を抱えているクエリの一部であり、ネストされた SELECT です
The error I get is:
ERROR: column "s_owner_guid" does not exist
LINE 7: ON v2.owner=s_owner_guid
特定の文字で区切られた2つのノードuidを含むset_of_guidsがあります
必要な情報を含む2つのテーブルがあります
vm_list
ノードは2つのテーブルですvm_owner_guid
ノード テーブルの id 列に一致する uid を持つ vm_list テーブルの列です。id
ノードテーブルの列ですvm_name
VM 名を含む vm_list の列です。node_name
ノード テーブルの id 列に関連付けられているノードの列です。- set_of_guids の最初の uid は vm_owner と一致し、ノード テーブルの id 列にも一致し、ノードの別の列に node_name があります
VM の 2 番目の uid を取得するには set_of_nodes を解析する必要があるため、SPLIT_PART および TRIM オプションを使用して uid を分離し、それを s_owner_guid と呼んでいます。
2 番目の node_name を取得するには、s_owner_guid を取り、それをノード テーブルの ID と照合する必要があります
最終的に、出力は次のようになります。
vm_name | p_owner_guid | p_owner_name | s_owner_guid | s_owner_name
-------------+---------------------------------------+-------------------+---------------------------------------+-----------------------
NAMEOFVM1 | b2a0bb4e-0a6a-4208-8ff1-6df549cf9c3f | primary_node_name | 1c732242-56d4-c9c8-d275-ba271600c314 | secondary_node_name
最初の 4 つのフィールドは取得できますが、最後の s_owner_name は取得できません。これを達成する方法はありますか?DBに依存するライブシステムがあるため、一時テーブルを作成しないようにしています。