MySQL:根据给定列上的几个键选择多行

时间:2015-06-22 10:23:55

标签: mysql sql database

我有这个mysql表结构:

------------------------------------
| item_id | meta_key | meta_value |
------------------------------------
159         category    Bungalow
159         location    Lagos
159         price       45000

160         category    Bungalow
160         location    Abuja
160         price       53500
...
350         category    Bungalow
350         location    Lagos
350         price       32000

我想要做的是根据meta_key列选择符合两个或更多条件的多行。例如,假设我想为位于'拉各斯'的每个'平房'选择item_id。我该怎么做呢?

这是我的尝试,但无效:

SELECT `item_id` FROM `item_meta`
WHERE 
`meta_key` = 'category' AND `meta_value` = 'Bungalow'
AND 
`meta_key` = 'location' AND `meta_value` = 'Lagos'

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

如果您希望找到符合这两个标准的记录,可以采用这种方式

select `item_id` FROM `item_meta`
where 
( `meta_key` = 'category' and `meta_value` = 'Bungalow' )
or
( `meta_key` = 'location' AND `meta_value` = 'Lagos' )
group by `item_id` having count(*)=2 

答案 1 :(得分:0)

请尝试使用括号,否则您将无法获得预期结果:

SELECT `item_id` FROM `item_meta`
WHERE 
(`meta_key` = 'category' AND `meta_value` = 'Bungalow')
OR 
(`meta_key` = 'location' AND `meta_value` = 'Lagos')

答案 2 :(得分:0)

一种方法是通过您感兴趣的2个属性独立选择。通过将表连接到自身,您可以找到共享2个参数的条目(按item_id)。

以下内容:

select category.item_id 
from item_meta category 
    join item_meta location on location.item_id = category.item_id
where location.meta_key = 'location' AND location.meta_value = 'Lagos'
    and category.meta_key = 'category' AND category.meta_value = 'Bungalow'
group by category.item_id