MySQL - 在子查询/表中匹配2行(或更多!)

时间:2010-03-06 09:07:43

标签: mysql

我有这个架构,我需要匹配

中的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一次查看一行。我很难过。我还需要找到一个优雅地扩展的解决方案(例如查看三行等)。

4 个答案:

答案 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 BYHAVING查找具有预期匹配数的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”语句