繁体   English   中英

没有返回结果的简单 Postgres 查询

[英]Simple Postgres query returning no result

我有两个表:

products(id: integer, price: float, website_id: integer) 

adjustments(id: integer, product_id: integer, website_id: integer, factor:float)

我在两个表中都有关于 id 的索引,在调整表上有关于 website_id 和 product_id 的索引。

此查询返回数据,但对于一些 1k 产品和几百个调整需要大约 5 秒:

select 
    products.id, 
    case
    when adjustments.website_id = 1
    then
        products.price+coalesce(adjstments.factor,0)
    else
        products.price
    end as price
from
    products
left join
    adjustments on products.id = adjustments.product_id
where
    products.website_id = 1;

但是,当调整表中没有任何内容时,此其他查询不会返回任何结果:

select 
    products.id, 
    products.price+coalesce(adjstments.factor,0) as price
from
    products
left join
    adjustments on products.id = adjustments.product_id
where
    products.website_id = 1 and adjustments.website_id = 1;

不管第二个表中是否有任何匹配的记录,它不应该从第一个表中返回数据吗? 我究竟做错了什么?

如果在连接之后应用where子句中的过滤。 所以在这里,您从products获取所有行,并将它们与空的adjustments行匹配(因为表是空的)。 然后,您应用where条件,其中包括adjustments.website_id = 1因为adjustment.website_id始终为null ,不返回任何行。

您可以将此条件移动到join以获得您期望的行为:

select 
    products.id, 
    products.price+coalesce(adjstments.factor,0) as price
from
    products
left join
    adjustments on products.id = adjustments.product_id and adjustments.website_id = 1
where
    products.website_id = 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM