[英]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.