我正在使用postgresql。
我有一个名为custom_field_answers的表。数据看起来像这样
Id | product_id | value | number_value | 4 | 2 | | 117 | 3 | 1 | | 107 | 2 | 1 | bangle | | 1 | 2 | necklace | |
我想查找所有text_value为“ bangle”且number_value小于50的产品。
这是我的第一次尝试。
SELECT "products".* FROM "products" INNER JOIN "custom_field_answers" ON "custom_field_answers"."product_id" = "products"."id" WHERE ("custom_field_answers"."value" ILIKE 'bangle')
这是我的第二次尝试。
SELECT "products".* FROM "products" INNER JOIN "custom_field_answers" ON "custom_field_answers"."product_id" = "products"."id" where ("custom_field_answers"."number_value" < 50)
这是我最后的尝试。
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)
但这不会选择任何产品记录。
WHERE子句一次只能查看一行中的列。
因此,如果您需要一个条件应用于表中的两个 不同 行,则需要两次连接到该表,以便可以从这两个行中获取列。
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