Передача значения в подзапрос в PostgreSQL - PullRequest
0 голосов
/ 29 августа 2018

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

ошибка

ERROR:  syntax error at or near "x"
LINE 13:  families WHERE state_name IN x.names and family_name...

код

with x as (
    SELECT 
        bordering_states_names as names
    FROM 
        states 
    WHERE 
        state_name = 'Ohio' 
)
SELECT 
    family_name,
    state_name
FROM 
    families WHERE state_name IN x.names and family_name IS NOT NULL
LIMIT 20

В этом случае значение bordering_states_names выглядит следующим образом:

{"Ohio", "Indiana", "West Virginia", "Pennsylvania"}

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Таблица x должна существовать с FROM part для запроса ниже, иначе x может не иметь смысла.

Итак, объединение этих таблиц (families и x) может быть вариантом, как в следующем случае:

WITH x AS (
    SELECT 
        bordering_states_names as names
    FROM 
        states 
    WHERE 
        state_name = 'Ohio' 
)
SELECT f.family_name, f.state_name
  FROM families f inner join x
    ON ( f.state_name = x.names ) 
   AND family_name IS NOT NULL
 LIMIT 20;
0 голосов
/ 29 августа 2018

Вы можете переписать его как:

with x as (
    SELECT bordering_states_names as names
    FROM states 
    WHERE state_name = 'Ohio' 
)
SELECT family_name,
       state_name
FROM families 
WHERE EXISTS (SELECT 1 FROM x WHERE state_name = ANY (names))
  AND family_name IS NOT NULL
LIMIT 20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...