MySQL在多行和多个字段上选择AND

时间:2018-06-10 16:01:31

标签: javascript mysql sql node.js knex.js

我有一张桌子:

+ --------------------------+---------------------------+--------------+--------+
|           ID              |       SKU_ID              |   DKEY       |  DVAL  |
+ --------------------------+---------------------------+--------------+--------+
| cjamtti7z00aivmv4ffc9ttuw | cjamtti7z00afvmv4ai5i0ffy | Part         | A2030  |
| cjamtti7z00ajvmv4gztx7hq8 | cjamtti7z00afvmv4ai5i0ffy | Description  | Single |
| cjamtti7z00akvmv4zvrvtazj | cjamtti7z00afvmv4ai5i0ffy | Length mm    | 50     |
| cjamtti7z00alvmv4jxnryckh | cjamtti7z00afvmv4ai5i0ffy | Line Dia. mm | 6 - 10 |
+ --------------------------+---------------------------+--------------+--------+

我想创建一个查询,搜索与提供的对象匹配的SKU: { 'Fixing Hole Depth(mm)': '13 Min - 18 Max', 'Inside Dia. (mm)' : '11', 'Weight (g)' : '3' }

我似乎无法找到一种方法来组合AND和OR子句,从而为我提供所需的结果。

总而言之,我需要符合对象中所有条件的SKU_ID。

2 个答案:

答案 0 :(得分:3)

在基本SQL中,可以使用GROUP BY + COUNT实现。

SELECT SKU_ID
FROM your_table
WHERE (DKEY = 'Fixing Hole Depth(mm)' AND DVAL = '13 Min - 18 Max,') OR
    (DKEY = 'Inside Dia. (mm)' AND DVAL = '11,') OR
    (DKEY = 'Weight (g)' AND DVAL = '3')
GROUP BY SKU_ID
HAVING count(*) = 3

要求每个SKU_ID + DKEY都是唯一的(否则,对于相同的SKU_ID,您可能有3个值为DKEY ='权重(g)'并且查询将不起作用预期)

也许有一些不那么冗长的方式,但它应该是依赖于RDBMS的

答案 1 :(得分:0)

如果将子句正确地嵌套在方括号()中,那么 where 子句可以轻松地组合AND和OR。试试吧。