Поиск по таблицам

Всем привет! Я только начинаю постигать SQL и PostgeSQL, поэтому вопрос у меня довольно-таки простой и скорее всего имеет тривиальное решение, но поскольку с аспектами SQL я знаком плохо и документацию пока ещё воспринимаю не до конца =)

Задача состоит в следующем:

Имеется база данных, в ней две таблицы: table1 (id, table2_id) и table2(id, column1, column2). По сути table2_id - это FOREIGN KEY, но в БД он так не определён, поскольку приложение, которое использует эту БД не позволяет использовать такиею ключи, точнее это крайне не желательно. Отсюда собственно и проблема.

А конкретно задача в следующем: нужен запрос, который будет выбирать элементы из table1 по значениям из таблицы 2, т.е. что-то типа SELECT * FROM table1 WHERE table2_id = ( SELECT id FROM table2 WHERE column1 = 'value' ), но при этом вместо WHERE должно быть что-то такое, что может принимать не только одно значение.

Честно, пытался понять документацию, но не с умел в этом преуспеть.

Спасибо за внимание.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

1. Внешние ключи заводятся

1. Внешние ключи заводятся внутри БД, а приложение о них может даже и не знать.
2. У вас не та ситуация и внешние ключи судя по запросу вам ни к чему.
3. Используйте IN, например:

SELECT * FROM table1 WHERE table2_id IN (SELECT id FROM table2 WHERE column1 = 'value');

4. Используйе JOIN (позволяет избежать подзапросов), например:
SELECT * FROM table1 T1 INNER JOIN table2 T2 ON T1.table2_id=T2.id WHERE T2.column1 = 'value';

Полная и исчерпывающая документация по всем формам SELECT в PostgreSQL уже переведена на русский язык:
http://postgresql.ru.net/manual/queries.html

Большое спасибо! Вариант 3

Большое спасибо! Вариант 3 то, что нужно, так как нужно, чтобы возвращалась именно первая таблица, со всеми своими значениями.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023