MySQL select AND 在多行和多个字段上
MySQL select AND on multiple rows and multiple fields
我有一个 table:
+ --------------------------+---------------------------+--------------+--------+
| 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_IDs 匹配对象中的所有条件。
基本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,DKEY = 'Weight(g)' 可能有 3 个值,查询将无法按预期工作)
也许有一些不那么冗长的方法,但它应该是依赖于 RDBMS 的
您的 where 子句可以轻松组合 AND 和 OR,前提是您将它们正确地嵌套在方括号 () 中。试试看。
我有一个 table:
+ --------------------------+---------------------------+--------------+--------+
| 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_IDs 匹配对象中的所有条件。
基本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,DKEY = 'Weight(g)' 可能有 3 个值,查询将无法按预期工作)
也许有一些不那么冗长的方法,但它应该是依赖于 RDBMS 的
您的 where 子句可以轻松组合 AND 和 OR,前提是您将它们正确地嵌套在方括号 () 中。试试看。