Попытка получить значение из другой таблицы, используя any в SQL

#sql #postgresql

#sql #postgresql

Вопрос:

Мой запрос:

 SELECT * 
FROM table1
RIGHT JOIN table2 on table1.ID = any(table2.parents)
WHERE table1.ID = 1
  

Моя первая таблица:

 ID   | desc         
123  | Data123
231  | Data231 
  

Моя вторая таблица:

 ID   | parents
1    | {123,231}
2    | {123}  
  

Но этот запрос не работает. Я пытаюсь получить данные как из 123, так и из 231, как мне это исправить?

Комментарии:

1. Что означает «не работает»? Вы получаете сообщение об ошибке? Если да, то какой?

2. Я получаю пустые строки обратно, но он должен вернуть 2 строки.

Ответ №1:

any(table1.parents)

parents не существует в table1.

Попробуйте поменять местами

 SELECT * 
FROM table1
RIGHT JOIN table2 on table1.ID = any(table2.parents)
WHERE table2.ID = 1
  

Ответ №2:

Вы не указали, что именно вы хотите, но если вы просто хотите найти строки в table1, где идентификаторы присутствуют в table2.parents, это должно быть сделано следующим образом:

 select t1.*
from table1 t1
where exists (select *
              from table2 t2
              where t1.id = any(t2.parents))
order by t1.id;
  

Если вам также нужна информация из table2, вам нужно соединение (и я не думаю, что вам нужно внешнее соединение):

 select *
from table1 t1
  join table2 t2 on t1.id = any(t2.parents)
order by t1.id
  

Из-за характера соединения, которое возвращает строку (123,Data123) дважды — не знаю, хотите вы этого или нет.

Пример: http://rextester.com/PUOL76353

Комментарии:

1. Они оба по-прежнему возвращают нулевые строки для меня. То, что я пытаюсь получить, похоже на обе строки table1 и соединяется с первой строкой дважды table2.

2. @Antiwoutertje С примерами данных, которые вы предоставили, оба возвращают строки, см. Мой пример (ссылка). Если это не работает для вас, вам нужно показать нам пример данных, которые «не работают» для вас.

3. Я думаю, что сам допустил небольшую ошибку, сейчас я сам озадачен, но, думаю, я почти решил ее. Спасибо.