我有一张桌子
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/