2014-01-29 1 views
0

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

У меня есть таблица: автомобили

id | name | contents 
1 | Ford | {1, 3, 5} 

и табличные: содержимое

id | name | desc 
1 | Phone | .... 
2 | Keys | .... 

Я хочу, чтобы увидеть, если какие-либо ценности в содержании (поле) соответствуют любым идентификаторам в содержании (Таблица). Это база данных Postgres.

+0

плохой способ: вам нужны отношения таблицы автомобили> ---> содержимого < – venergiac

+0

Оно не позволяет массив между целочисленным [] целым числом. –

ответ

0

выберите * от содержания, где идентификатор в (выберите unnest (содержание) от автомобилей)

0

Вы можете использовать <@ оператор (массив содержал по дороге), которая индексируется с помощью GiST opclasses в intarray внутренней линии:

SELECT ... 
FROM cars 
INNER JOIN contents ON (ARRAY[contents.id] @< cars.contents); 

или использовать = ANY:

SELECT ... 
FROM cars 
INNER JOIN contents ON (contents.id = ANY (cars.contents)); 

... но это, вероятно, mismodelling; вы должны, вероятно, иметь таблицу соединений между двумя таблицами, чтобы моделировать это отношение m: n, а не вставлять его в массив.

См:

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