我有一个SQL查询。 Where子句有点棘手,因为我需要它告诉fv.position应该大于一个数字,而id_feature应该具有一个特定的数字,但只能在该状态下进行。因此,可能会有多个这样的堆栈。
到目前为止,这是我想出的:
SELECT
*
FROM
psx_product p
INNER JOIN
psx_feature_product fp ON fp.id_product = p.id_product
INNER JOIN
psx_feature_value fv ON fp.`id_feature_value` = fv.`id_feature_value`
WHERE
(fv.position > 0 AND fp.id_feature = 6)
AND
(fv.position > 5 AND fp.id_feature = 7)
AND
(fv.position > 2 AND fp.id_feature = 8)
但是我认为上面的示例是错误的处理方式,因为fv.position不知道它仅与perentesis中的特征连接,并堆叠where语句,只给出空结果,where,一个给出结果。应该怎么做正确呢?
最佳答案
如果我理解正确,那么在where子句中需要在个案之间使用OR,而不是AND
显然,一个字段不能同时等于两个不同的值
如果有一个公式可以设置fv.position和fp.id_feature的参数,则可以保存所有特定条件并编写特定条件。
SELECT * FROM psx_product p
INNER JOIN psx_feature_product fp ON fp.id_product = p.id_product
INNER JOIN psx_feature_value fv ON fp.`id_feature_value` = fv.`id_feature_value` WHERE
(fv.position > 0 AND fp.id_feature = 6) OR
(fv.position > 5 AND fp.id_feature = 7) OR
(fv.position > 2 AND fp.id_feature = 8)