J'utilise postgresql.Comment rejoindre la même table plusieurs fois
J'ai une table appelée custom_field_answers. Les données ressemblent à ceci.
Id | product_id | value | number_value |
4 | 2 | | 117 |
3 | 1 | | 107 |
2 | 1 | bangle | |
1 | 2 | necklace | |
Je veux trouver tous les produits qui TEXT_VALUE comme 'Bangle' et NUMBER_VALUE moins de 50.
SELECT p.*
FROM "products" AS p
INNER JOIN "custom_field_answers" AS a1 ON p."id" = a1."product_id"
INNER JOIN "custom_field_answers" AS a2 ON p."id" = a1."product_id"
WHERE a1."value" = 'bangle' AND a2."number_value" < 50
J'ai essayé de produire cette sql avec le code suivant.
conditions = <conditions from arel>
relation = self.scoped
conditions.each do |condition|
relation = relation.merge(where(condition))
end
joins(:custom_field_answers).merge(relation)
relation.to_a
Ce produit suivant sql
SELECT "products".* FROM "products" INNER JOIN "custom_field_answers"
ON "custom_field_answers"."product_id" = "products"."id"
WHERE ("custom_field_answers"."value" ILIKE 'bangle')
AND ("custom_field_answers"."number_value" < 50)
Comme vous pouvez le voir ce sql ne ressemble pas à l'sql désiré (mentionné en haut).
J'ai essayé de déplacer le joint coder un peu comme celui-ci
relation = self.scoped
conditions.each do |condition|
relation = relation.merge(where(condition).joins(:custom_field_answers))
end
relation.to_a
Toujours pas de chance. Tout le monde sait comment forcer une nouvelle jointure pour chaque relation. J'utilise Rails 3.1.1.