0

我有两张桌子,一张用于客户,一张用于物品。

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

我正在使用 PostgreSQL 9.5.1

4

2 回答 2

0

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

我限制了可以指定的偏好类型,然后将它们作为列存储在 Customer 中。

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

于 2016-03-02T05:57:33.667 回答
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
于 2016-03-01T01:32:59.637 回答