如何编写其子where包含在另一个查询中的SQL查询?

时间:2016-03-01 00:59:57

标签: sql postgresql plpgsql postgresql-9.5

我有两个表,一个用于Customer,另一个用于Item。

在Customer中,我有一个名为“preference”的列,它存储一个在SQL中表示为WHERE子句的硬标准列表,例如"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和动态SQL但我无法弄清楚应该如何做到这一点。

我正在使用PostgreSQL 9.5.1

2 个答案:

答案 0 :(得分:0)

我将假设首选项与我编写的item_id列相同。您可能需要调整它以适合您的情况。对于这样的未来问题,向我们提供您正在使用的表格结构可能会付出代价,这确实可以帮助我们!

您要求的是子查询:

select  * 
from  item 
where item_id in (select 
                    preference 
                from 
                    customer 
                where id = 1)

我建议的是加入:

select item.* 
from item 
join customer on item.item_id = customer.preference
where item.price<20 and 
    item.category='household'
    customer.id = 1

答案 1 :(得分:0)

我决定更改我的架构,因为以这种方式将条件存储在首选项中变得非常混乱。

我限制了可以指定的首选项类型,然后将它们存储为Customer中的列。

之后,我想要的所有查询都可以表示为连接。