
反向逻辑改写正向逻辑
作为DBA一员,是不是很少写SQL啊,哈哈,俺也一样,今天在群里看到这样一个问题。



。然后经过一段时间的思考分析🤔,恩,没想出来。果断向郑松华老师寻求帮助,恩,很快啊,没有闪,直接就分析出这个条件的含义了。

然后我按照条件的含义,模拟问题截图创建了一张测试表,并插入一些测试数据:
--Create TableCREATE TABLE t ( id INT(11) PRIMARY KEY AUTO_INCREMENT, trigger_code INT(11) DEFAULT NULL, handle_code INT(11) DEFAULT NULL, alarm_status INT(11) DEFAULT NULL) ENGINE=InnoDB;--Insert Test DataINSERT INTO t VALUES(1, 0, 200, 666),(2, 666, 666, 0),(3, 666, 666, 0),(4, 200, 0, 666),(5, 666, 666, 0),(6, 0, 0, 666),(7, 666, 666, 0),(8, 0, 0, 0);--Query DataSELECT * FROM t;

SELECT * FROM t WHERE !((trigger_code IN (0,200) AND handle_code = 0) OR (handle_code = 200)) AND alarm_status=0 ORDER BY id ASC LIMIT 1000;SELECT * FROM t WHERE (handle_code<>200 and concat(handle_code ,trigger_code) not in ('00','0200')) AND alarm_status=0 ORDER BY id ASC LIMIT 1000;


文章转载自 GrowthDBA,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




