我有一张桌子

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%')和(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%'));

但是解释这个查询返回不可能的WHERE子句。
怎样才能让这个工作。
此查询由BE代码生成,因此类似这样的块可以是许多-
( keyword_id = 2 AND value LIKE '%abc%')

取决于用户输入。由和或或分隔的块也由用户确定。不可能使用别名,因为块的数量没有限制。
有人能帮忙吗?

最佳答案

嵌套查询应提供所需的结果:

SELECT DISTINCT asset_id FROM asset_keyword_table WHERE
( category_id = 4424 AND keyword_id = 2 AND value LIKE '%abc%' )
AND asset_id IN
( SELECT DISTINCT asset_id FROM asset_keyword_table WHERE
   category_id = 4424 AND keyword_id = 3 AND value LIKE '%Jpeg%' )
/*  OR asset_id IN
( SELECT DISTINCT asset_id FROM asset_keyword_table WHERE
   category_id = 4424 AND keyword_id = 4 AND value LIKE '%500%' ) */

SQL Fiddle

关于mysql - 在同一张表上选择多个键值对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48440551/

10-12 18:32