У меня есть две таблицы, одна для клиента и одна для элемента.Как написать SQL-запрос, чье предложение содержится в другом запросе?
В Customer у меня есть столбец с названием «предпочтение», в котором хранится список жестких критериев, выраженных как предложение WHERE
в SQL, например. "item.price<20 and item.category='household'"
.
Я хотел бы запрос, который работает следующим образом:
SELECT * FROM item WHERE interpret('SELECT preference FROM customer WHERE id = 1')
Что переводится на это:
SELECT * FROM item WHERE item.price < 20 and item.category = 'household'
Пример модели данных:
CREATE TABLE customer (
cust_id INT
preference VARCHAR
);
CREATE TABLE item (
item_id INT
price DECIMAL(19,4)
category VARCHAR
);
# Additional columns omitted for brevity
Я я искал кастинг и динамический SQL, но я не смог понять o как я должен это делать.
Я использую PostgreSQL 9.5.1
My 'preference' не имеет ничего общего с' item_id', поэтому первый запрос не будет работать. То же самое с предложением «join on» второго примера. Я хочу, чтобы иметь возможность заменить полное предложение 'where' вашего второго примера на запрос. В то время как подзапросы позволяют использовать отдельные кортежи или столбцы из другого запроса, я хочу заменить все свое предложение 'where', используя строку, сохраненную в другом запросе. Поскольку предложение 'where' будет меняться в зависимости от клиента, и я предполагаю, что он должен быть динамичным, чтобы это работало. –
@PrashanthChandra: Ах, спасибо за разъяснение. Я вижу, чего вы пытаетесь достичь сейчас. Да, динамический SQL мог бы пойти туда, но как это реализовано в PostgreSQL, это немного из-за моей рулевой рубки! – LordBaconPants