#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. Я думаю, что сам допустил небольшую ошибку, сейчас я сам озадачен, но, думаю, я почти решил ее. Спасибо.