MySQL在用户元表中选择/加入多行

时间:2013-02-12 21:35:15

标签: mysql join meta

我有一个名为user_meta的表,它包含如下数据:

---------------------------
| user_id | field | value |
---------------------------
|    1    |   1   | Green  |
|    1    |   2   | Square |
|    1    |   3   | Big    |
|    2    |   1   | Red    |
|    2    |   2   | Square |
|    2    |   3   | Small  |
----------------------------

field列是用户个人资料中的表单字段的编号。 value列是用户通过表单提交的值。

如何编写一个MySQL查询来返回所有拥有“绿色大方块”的用户?

谢谢!

3 个答案:

答案 0 :(得分:4)

这将返回您想要的结果。这使用WHERE子句返回具有所需值的所有记录,然后计算不同的值以确保只有3:

select user_id
from user_meta
where value in ('Green', 'Square', 'Big')
group by user_id
having count(distinct value) = 3

请参阅SQL Fiddle with Demo

答案 1 :(得分:2)

如果你坚持使用该模式,那么使用子查询会有效。但它不会很快。

select userid 
from user_meta
where user_id in (
    select user_id from user_meta 
    where (field = 1 and value = 'Green')
)
and user_id in (
    select user_id from user_meta 
    where (field = 2 and value = 'Square')
)
and user_id in (
    select user_id from user_meta 
    where (field = 3 and value = 'Big')
)

答案 2 :(得分:1)

SELECT user_id FROM user_meta user_meta1 JOIN user_meta user_meta2 ON user_meta1.UserID = user_meta2.UserID JOIN user_meta user_meta3 ON user_meta2.UserID = user_meta3.UserID WHERE user_meta1.value = 'Green' AND user_meta2.value='Square' AND user_meta3.value='big'