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

标签 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'

任何帮助将不胜感激。

最佳答案

如果您想查找与这两个条件匹配的记录,这里是一种方法

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 

关于MySQL:根据给定列上的多个键选择多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30977551/

相关文章:

mysql - 所选列没有兼容的类型,即使它具有相同的类型

php - Codeigniter 3 从表中选择全部但排除当前组 ID

mysql - 在 MySQL 存储过程中设置 NULL 参数

iphone - 将 iPhone 应用程序与 MySQL 数据库连接的教程? (接口(interface) Objective-C 与 mysql)

mysql - 我们可以在不创建过程的情况下在 mysql 中运行代码吗

sql - 如何避免在mysql中的SELECT之前写入模式名​​称?

c# - SCOPE_INDENTITY() 不工作它返回 null 吗?

python - 在 Django 中查询与午夜重叠的多个营业时间范围

php - 如何使用外键将值保存到数据库

mysql - 按开始和/或结束日期对 MySQL 中的事件进行排序