我请求一些关于MySQL when-then语句的帮助,以便在比较具有相同sid但不同cid数据值的多个记录后从表中获取所有sid:
flag sid cid data
---- --- --- ----
1 300 1 john
1 300 2 john_email
1 300 3 77500
1 300 4 ok
1 301 1 jack
1 301 2 john_email
1 301 3 72210
1 301 4 notok
在这里,对于每个 sid,我需要检查是否(sid=2 有数据=john_email)和(sid=4 有数据=ok)只有当两个条件都满足时,我才返回 sid。即输出将仅为"300"。
我很困惑如何使用案例,将"数据"与"john_email"进行比较,并将数据与"确定"进行比较......基于 CID 值。感谢您的阅读。
试试
select sid
from your_table
group by sid
where (cid=2 and data='john_email')
or (cid=4 and data='ok')
having sum(cid=2)=1 and sum(data='john_email')=1
and sum(cid=4)=1 and sum(data='ok')=1
SQLFiddle 示例
您应该将表连接到自身,然后您可以检查两行中的条件,就好像它是一行一样......
SELECT T1.sid
FROM MYTABLE T1
JOIN MYTABLE T2 ON T1.SID=T2.SID AND T1.CID=1 AND T2.CID=4
WHERE T1.DATA='john'
AND T2.DATA='ok'
请注意,我在连接子句中使用了 CID 值,但如果要连接不同的数据行,则必须调整它们......
您可以做的是使用子查询并检查该值是否存在。
SELECT
*
FROM
table outertable
WHERE
( cid=2 AND data='john_email' )
AND
EXISTS ( SELECT sid FROM table WHERE cid = 4 AND data = 'ok' AND sid = outertable.sid )