我有一个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)

10-04 11:24