在開始使用XML列作爲鍵/值類型的數據持有者之後,我想知道PostgreSQL的'LIKE'和'DISTINCT'是否可以用於這些數據,我需要什麼。PostgreSQL,LIKE和DISTINCT使用XML
在上一個問題中,我發佈了example table,它也涵蓋了這些主題的需求。
所以,這樣的查詢...
SELECT myindex, xpath('/setup/node()/text()', description) FROM temp1
給出了提取存儲的XML的所有節點的所有數據想要的結果。
"{mydatabase,127.0.0.1,john,4424}"
"{herdatabase,127.0.0.1,saly,5432}"
現在我嘗試在關鍵的過濾由值結果:
SELECT myindex, xpath('/setup/node()/text()', description) FROM temp1
WHERE (xpath('/setup/DBUSER/text()', description))::TEXT[] = '{saly}'::TEXT[];
並獲得預期的結果:
"{herdatabase,127.0.0.1,saly,5432}"
1)這是問題,我不知道如何使用LIKE而不是'='。
SELECT myindex, xpath('/setup/node()/text()', description) FROM temp1
WHERE (xpath('/setup/DBUSER/text()', description))::TEXT[] LIKE 'aly'::TEXT[];
2)最好說,我想,我的「喜歡」下的所有可用數據的搜索,例如:
SELECT myindex, xpath('/setup/node()/text()', description) FROM temp1
WHERE (xpath('/setup/node()/text()', description))::TEXT[] LIKE 'aly'::TEXT[];
但也不起作用。
3)更準確地說,在現實世界中,需要使用DISTINCT標準過濾XML中的可用數據,因爲會有更多次相同的數據。就像這樣:
SELECT DISTINCT xpath('/setup/node()/text()', description) FROM temp1
WHERE (xpath('/setup/node()/text()', description))::TEXT[] LIKE 'aly'::TEXT[];
我有,但凌亂的數據和文本列的類型,並獲得更有條理的數據,我想切換到XML描述的功能了。
請幫助根據需要獲得答案。
編輯 的Postgres 9.3,此Windows 7 數據是在這裏:PostgreSQL, using xml
這是我的查詢:
SELECT LAST(myindex), LAST(description), content::text, LAST(content)
FROM (SELECT myindex, description,
(xpath('/setup/node()/text()', description)) AS content FROM temp1) AS alias
WHERE content::text ILIKE '%127%'
GROUP BY content::text;
通過嘗試由自己作出查詢我看到比較好使用分組而不是分開。
它有點慢但可行。
還有一些經驗認爲,那些查詢OK?
一些示例數據去查詢將很好。另外,你的PostgreSQL版本是什麼? (有沒有考慮設置一個非隨機生成的用戶名?) –
這是我感興趣地連接的傳統用戶名:)當然,我給了鏈接樣本數據,希望這很清楚。鏈接指向http://stackoverflow.com/questions/21410412/postgresql-using-xml。與此同時,我解決了大部分問題,只剩下一個問題。請參閱有關EDIT的問題。 –
由於早上比晚上更聰明,我解決了最後剩下的問題,現在我只需要知道我的查詢是否正確或可以寫得更好? –