满足WHERE子句中的所有条件条件

时间:2014-09-30 02:51:23

标签: mysql sql

我想检索具有多个条件的数据,其中每个条件都包含某些字段中的某些关键字。

表格结构如下:

sid nid cid数据
50 7 5 ee
50 7 6 aa
50 7 8 ff
51 7 5 ee
51 7 6 ee
52 7 8 ff

我想找回满足这两个条件的sid:
when(cid = 5,数据LIKE'%ee%')
when(cid = 8,数据LIKE'%ff%')

检索到的sid应该只有50,而不是50,51和52。

当我写下我的sql时,它没有得到正确的结果:

SELECT * FROM webform_submitted_data WHERE
  (cid=5 AND data LIKE '%ee%') AND (cid=8 AND data LIKE '%ff%')

所以我改为

SELECT * FROM webform_submitted_data WHERE 
CASE `cid`  
WHEN '5' THEN `data` LIKE '%ee%'  
WHEN '8' THEN `data` LIKE '%ff%' 
END

但这也没有给出正确的结果。

有什么方法可以得到我想要的结果吗?

3 个答案:

答案 0 :(得分:0)

如何计算SID的数量并且它应与您的条件数相匹配?

SELECT  sid
FROM    webform_submitted_data
WHERE   (cid=5 AND data LIKE '%ee%')        -- first condition
        OR (cid=8 AND data LIKE '%ff%') -- second condition
GROUP   BY  sid
HAVING  COUNT(*) = 2                        -- number of conditions

答案 1 :(得分:0)

你试过OR吗?

SELECT * FROM webform_submitted_data WHERE
  (cid=5 AND data LIKE '%ee%') OR (cid=8 AND data LIKE '%ff%')

答案 2 :(得分:0)

这里我们根据第一个条件获取行,然后使用exists来查看第二个案例也匹配

SELECT T1.* FROM
(SELECT * FROM webform_submitted_data
WHERE 
CASE `cid`  
WHEN '5' THEN `data` LIKE '%ee%' 
END 
)T1
WHERE EXISTS 
(

SELECT 1 FROM webform_submitted_data w
WHERE 
CASE `cid`  
WHEN '8' THEN `data` LIKE '%ff%'
END 
AND w.sid = T1.sid
)