我有一张 table
id keyword_id value category_id asset_id
1 2 abc.jpg 4424 479
2 3 Jpeg 4424 479
3 4 400*600 4424 479
4 2 def.jpg 4424 603
5 3 Jpeg 4424 603
6 4 500*700 4424 603
我想根据多个对获取值,例如 (keyword id = 3 and value like '%Jpeg%'
) And (keyword id = 2 and value like '%abc% '
).
这应该只返回一个 asset_id 479
的值,因为它满足两个条件。
我正在运行类似
的查询SELECT DISTINCT asset_id FROM asset_keyword_table where category_id = 4424
AND (( keyword_id = 2 AND value LIKE '%abc%') AND ( keyword_id = 3 AND
value LIKE '%Jpeg%'));
但是 EXPLAIN 这个查询返回不可能的 WHERE 子句。 让这个工作的方法是什么。 此查询由 BE 代码生成,因此像这样的 block 可以有很多 -
( keyword_id = 2 AND value LIKE '%abc%')
取决于用户输入。 AND 或 OR 分隔的 block 也由用户确定。不可能使用别名,因为 block 的数量没有限制。
有人能帮忙吗?
最佳答案
您需要过滤符合条件的总行数。
SELECT Asset_ID
FROM asset_keyword_table
WHERE category_id = 4424
AND
(( keyword_id = 2 AND value LIKE '%abc%')
OR (keyword_id = 3 AND value LIKE '%Jpeg%'))
GROUP BY Asset_ID
HAVING COUNT(*) = 2 -- number of rows that matched the condition
这是一个 Demo .
关于mysql - 在同一个表上选择多个键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48440551/