我有这个架构,我需要匹配
中的2行user_data:user_id,field_id,value
示例输出将是:
user_id field_id value
-----------------------------
1 1 Gandalf
1 2 Glamdring
如何编写一个基本上说“查找其field_id 1为Gandalf的用户的用户ID,而field_id 2为Glamdring?”的查询。
SELECT FROM一次查看一行。我很难过。我还需要找到一个优雅地扩展的解决方案(例如查看三行等)。
答案 0 :(得分:3)
您可以运行查询以获取与每个条件匹配的用户并将结果相交。由于MySQL不支持交叉,你可以通过n路连接来实现:
SELECT T1.user_id
FROM Table1 T1
JOIN Table1 T2 ON T1.user_id = T2.user_id
WHERE T1.field_id = 1 AND T1.value = 'Gandalf'
AND T2.field_id = 2 AND T2.value = 'Glamdring'
答案 1 :(得分:1)
我会尝试以下方法:
SELECT user_id
FROM user_data
WHERE ( field_id = 1 AND value= 'Gandalf' )
OR ( field_id = 3 AND value = 'Glamdring' )
GROUP BY user_id
HAVING COUNT( field_id ) = 2
它将搜索符合您的某个条件的所有行,然后使用GROUP BY
和HAVING
查找具有预期匹配数的user_id
。
答案 2 :(得分:0)
select * from user_date where ( field_id= 1 AND value='Gandalf' ) OR ( field_id =2 AND value ='Glamdring' ) ;
答案 3 :(得分:0)
HAVING子句是关键。它将查询从“OR”语句转换为“AND”语句