我想检索具有多个条件的数据,其中每个条件都包含某些字段中的某些关键字。
表格结构如下:
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
但这也没有给出正确的结果。
有什么方法可以得到我想要的结果吗?
答案 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
)