首页 > 解决方案 > 无法确定连接查询

问题描述

我有一个名为products的表,一个product_taxonomies product_taxonomies 有 product_id 和 taxonomy_id 字段我正在尝试获取链接到多个 product_taxonomies 的产品。使用:

SELECT "products".* FROM "products" right outer join product_taxonomies on product_taxonomies.product_id = products.id WHERE "product_taxonomies"."taxonomy_id" = $1 AND "product_taxonomies"."taxonomy_id" = $2 LIMIT $3  [["taxonomy_id", 39], ["taxonomy_id", 29], ["LIMIT", 10]]

我无法获得同时具有这两个分类 ID 的产品。如果我在 [29,39] 中使用 where taxonomy_id ,它将返回具有其中任何一个的任何产品,而不是同时返回两者。我尝试了所有我知道的连接。这是在 Rails 中完成的,但可以使用 SQL 回复。

标签: sqlruby-on-railspostgresqlleft-join

解决方案


首先,我不明白您为什么要使用外连接。

其次,当您加入 时product_taxonomies,您要求的是taxonomy_id具有两个不同值的记录。这样的记录是不可能存在的。

我认为你想要的是加入两次这样的product_taxonomies事情:

select p.*
  from products p
       join product_taxonomies t1 
         on t1.product_id = p.id
        and t1.taxonomy_id = $1
       join product_taxonomies t2
         on t2.product_id = p.id
        and t2.taxonomy_id = $2

如果您想让它对taxonomy_id值列表更具可扩展性,请在评论中说明。


推荐阅读