2014-09-16 4 views
0

Если у меня есть таблица со столбцом HSTORE:Compute совместно hstore ключевых имен в Postgresql

CREATE TABLE thing (properties hstore); 

Как я могу запросить эту таблицу, чтобы найти ключевые имена hstore, которые существуют в каждой строке.

Например, если выше таблица имела следующие данные:

   properties      
------------------------------------------------- 
"width"=>"b", "height"=>"a" 
"width"=>"b", "height"=>"a", "surface"=>"black" 
"width"=>"c" 

Как бы написать запрос, возвращаемый 'width', так как это единственный ключ, который происходит в каждой строке?

skeys() предоставит мне все ключи свойств, но я не уверен, как их заполнить, поэтому у меня есть только те, которые встречаются в каждой строке.

ответ

1

В руководстве мы получаем большую часть пути, но не весь путь ... вниз в нижней части http://www.postgresql.org/docs/8.3/static/hstore.html под заголовком «Статистика», они описывают способ подсчета ключей в hstore.

Если мы адаптируем это к вашей примерной таблице выше, вы можете сравнить подсчеты с количеством строк в таблице.

SELECT key 
    FROM (SELECT (each(properties)).key FROM thing1) AS stat 
    GROUP BY key 
     HAVING count(*) = (select count(*) from thing1) 
    ORDER BY key; 

Если вы хотите найти противоположные (все те ключи, которые не в каждой строке вашей таблицы), просто измените = к < и вы в бизнесе!

Смежные вопросы