我有张桌子:
+ --------------------------+---------------------------+--------------+--------+
| 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。
发布于 2018-06-10 16:10:57
在基本SQL中,它可以通过组+计数来实现。
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 =‘work (G)’的值,并且查询不能像预期的那样工作)
也许有一些不那么冗长的方式,但它应该是RDBMS依赖的。
发布于 2018-06-10 16:11:23
如果在方括号()中正确嵌套,where子句可以轻松地组合AND和OR。试试看。
https://stackoverflow.com/questions/50785540
复制相似问题