问题描述
我有一个名为产品的表和一个 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]]
我无法获得同时具有这两个taxonomy_id的产品。如果我在[29,39]中使用where taxonomy_id,它将返回任何包含其中任何一个的产品,而不是同时显示两者。 我尝试了所有我知道的联接。 这是在Rails中完成的,但可以使用sql答复。
解决方法
首先,我不明白您为什么使用外部联接。
第二,当您加入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
值列表,请在评论中说。
您可以使用GROUP BY子句来获取所有需要附加多个taxonomy_id的产品
SELECT "products".id FROM "products"
right outer join product_taxonomies
on product_taxonomies.product_id = products.id
WHERE
"product_taxonomies"."taxonomy_id" IN ($1,$2)
GROUP BY products.id
HAVING COUNT(DISTINCT "product_taxonomies"."taxonomy_id" )=2