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');