Mysql 如何获取具有多个条件的查询结果?
我有一张这样的桌子Mysql 如何获取具有多个条件的查询结果?,mysql,sql,Mysql,Sql,我有一张这样的桌子 Table ----- userid fieldid fieldvalue 其中userid和fieldid是此表的主键对 我想进行一个sql查询,查找所有具有fieldvalue等于所选fieldid 例如,对于值 fieldid: 817 fieldvalue: 'yes' 我可以使用如下sql查询: select userid FROM table where (fieldid=817 AND fieldvalue='yes') 这个查询工作正常 但是,如果我有
Table
-----
userid
fieldid
fieldvalue
其中userid和fieldid是此表的主键对
我想进行一个sql查询,查找所有具有fieldvalue
等于所选fieldid
例如,对于值
fieldid: 817
fieldvalue: 'yes'
我可以使用如下sql查询:
select userid FROM table where (fieldid=817 AND fieldvalue='yes')
这个查询工作正常
但是,如果我有第二个或第三个条件,则进行查询
像这样:
select userid
FROM table
where (fieldid=817 AND fieldvalue='yes')
AND (fieldid=818 AND fieldvalue='no')
返回一个空结果,但在
个人标准
有没有办法纠正这个问题
更新
我忘了写一个用例(地址)
对于这个表,我需要一个sql查询来查找满足以下条件的用户:fieldID817的值为yes,fieldID818的值为no
使用OR建议,到目前为止,我要么满足fieldid 817的值为yes,要么满足fieldid 818的值为no
我希望这两个条件都得到满足。在上述情况下,预期结果如下:
userid
1
而不是
userid
1
2
因为userid2不能同时满足这两个条件。抱歉造成混淆。尝试使用或
select userid FROM table where (fieldid=817 AND fieldvalue='yes') OR(fieldid=818 AND fieldvalue='no')
您的查询希望字段ID为817和818,这是不可能的。您应该在不同的条件之间使用
或
SELECT userid
FROM table
WHERE (fieldid=817 AND fieldvalue='yes')
OR (fieldid=818 AND fieldvalue='no')
使用和/或
如果第一个条件和
第二个条件是正确的
如果第一个条件或
第二个条件是正确的
编辑:根据您的评论,您可以通过以下方式进行编辑
select t1.userid
FROM temp t1
where (t1.fieldid=817 AND t1.fieldvalue='yes')
AND EXISTS (SELECT userid
FROM temp t
WHERE t.userid = t1.userid
AND fieldid=818
AND fieldvalue='no')
请参阅带有工作副本的文档
甚至是这样
select t1.userid
FROM temp t1
left join temp t2
on t1.userid = t2.userid
where (t1.fieldid=817 AND t1.fieldvalue='yes')
AND t2.fieldid=818 AND t2.fieldvalue='no'
这是另一个
如果要加入更多字段,请执行以下操作:
select t1.userid
FROM temp t1
left join temp t2
on t1.userid = t2.userid
left join temp t3
on t1.userid = t3.userid
where (t1.fieldid=817 AND t1.fieldvalue='yes')
AND (t2.fieldid=818 AND t2.fieldvalue='no')
AND (t3.fieldid=819 AND t3.fieldvalue='no')
您应该在WHERE
子句中使用或而不是和。请查看此内容以获得快速简单的解释。您好,请尝试使用或代替和
select userid FROM table where (fieldid=817 AND fieldvalue='yes') OR (fieldid=818 AND fieldvalue='no')
如果使用和
,它将检查是否必须满足条件fieldid=817和fieldvalue='yes'
和fieldid=818和fieldvalue='no'
,但这是不可能的。当在两个条件之间使用或
运算符时,它将给出具有两个条件的结果
谢谢除了使用或
的许多建议(这些建议完全正确)之外,您还可以在
中使用(这可能会使查询更具可读性)
要查找同时满足两个条件的所有userid
,您需要将表
自联接到自身:
SELECT userid
FROM table AS t1 JOIN table AS t2 USING (userid)
WHERE
(t1.fieldid = '817' AND t1.fieldvalue = 'yes')
AND (t2.fieldid = '818' AND t2.fieldvalue = 'no' )
您需要像这样使用它:
select userid
FROM table
where fieldid in (817, 818) and fieldvalue in ('yes', 'no');
必须通过OR替换支架之间的AND。否则,您希望选择id=817和id=818的条目。这也将匹配(817,“no”)
和(818,“yes”)
,这是不可取的。您好,但这是否满足此用户的fieldid=817的值为“yes”,fieldid=818的值为“no”的条件?我希望这两个条件都得到满足,但对我来说都不起作用。到目前为止,你是否尝试运行以查看它是否满足你的要求?是的,但它不满足,它向用户显示满足第一个或第二个条件。你能发布一些示例数据和你需要的预期结果吗?嗨,我做了澄清,很抱歉造成混淆。这将仅显示满足其中一个条件而非两个条件的用户,是否有使用此表示法的替代方法?@nkorf:您是说相同的用户ID
在您的表中多次出现,并且具有不同的(fieldid,fieldvalue)
对?在这种情况下,您需要自联接。我已经用一个例子更新了我的答案。嗨,这在3个或更多的条件下如何工作?从表中写入t1联接表作为t2联接表作为t3是否正确。。。。使用(userid)@nkorf:您必须指导MySQL如何将每个附加表连接起来:从表作为t1连接表作为t2使用(userid)连接表作为t3使用(userid).
。
SELECT userid
FROM table AS t1 JOIN table AS t2 USING (userid)
WHERE
(t1.fieldid = '817' AND t1.fieldvalue = 'yes')
AND (t2.fieldid = '818' AND t2.fieldvalue = 'no' )
select userid
FROM table
where fieldid in (817, 818) and fieldvalue in ('yes', 'no');