mysql根据id查询sql语句_【mysql】请问 SQL (mysql) 如何查询相同 ID下某一列全部相同的 sql 语句怎么写?...

表名称 为:egg_school_en_user_data_word_log

72fc49f56b162b85e0855a3249c615e6.png

例如以上的图相同ID ‘wextid’ 下 某一列 ‘result’ 全部等于 error 的

正确将查询出 wextid 为 5528 的数据

而 wextid 为 2628 的数据 因为其中有一行 ‘result’ 为 correct 所有不应该被查处。

我的目的 是指 在 wextid 相同情况下,result 必须全部为 error 的值。 我需要的是 如果上图中 第 5行(ID为730) 的 result 变成error 那么将查询出 5528,2628 个值 的SQL语句。

回答

select * from

(select wextid,result

from t_test

group by wextid,result) a

group by wextid

having count(1)=1 and result = 'error'

select * from egg_school_en_user_data_word_log

a where not exists(select wextid from egg_school_en_user_data_word_log

b where a.wextid=b.wextid and b.result="correct");

可以再优化下。

我经常这么写,不用join也不用嵌套,一层select就可以:

select wextid

from egg_school_en_user_data_word_log

group by wextid

having group_concat(distinct result) = "error"

这句的关键就在于里having里可以用group_concat把不同的result给链接起来,若结果为”error”即为符合条件。

希望能帮助到你。

我会选择php处理

查出所有result = error的id数组A

查出所有result != error的id数组B

array_diff(A,B);

SELECT * FROM t_test WHERE wextid IN (

SELECT wextid FROM

(SELECT wextid ,

SUM(CASE WHEN result='error' THEN 1 ELSE 0 END) AS num1,

SUM(CASE WHEN result='correct' THEN 1 ELSE 0 END) AS num2

FROM t_test GROUP BY wextid ) b

WHERE num2=0)

子查询 性能可能不行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值