(1).查询出现问题的sql:
SELECT * FROM hqjf_express_trace_items WHERE trace_id in( SELECT trace_id FROM hqjf_express_trace WHERE (STATUS = 1 OR receipt_time > 0 ) AND trace_id>0 AND type<>'' GROUP BY type )
问题点:子查询中单独查询的结果trace_id(3,2,9,1,91,5,7,80),整个SQL查询出的结果多出了trace_id(8)
(2).正确的写法:
SELECT * FROM hqjf_express_trace_items WHERE trace_id in( SELECT max(trace_id) FROM hqjf_express_trace WHERE (STATUS = 1 OR receipt_time > 0 ) AND trace_id>0 AND type<>'' GROUP BY type )
当我们使用group by时进行select字段,字段要么是group by的字段,要么对其他字段进行聚合处理,否则在子查询中会出现问题。另外建议使用sql严格模式,会直接报错,养成良好的习惯。
下面的是商品数据表,id是主键,catename是分类,titile是标题,price是价格,现在要求计算每种分类下的商品平均价格.id catename &n...
已有表名log来记录用户日志,id是主键,uid是用户id,rmk是备注,addtime是时间戳,需要取出不重复的用户日志记录默认的结果集:id uid rmk ...
【一】.配置3台服务器centos,并安装mysql1.主服务器192.168.5.21(master) 2.从服务器192.168.5.22(slave1) 3.从服务器192.168.5.23(slave2) 最新的centos版...
【一】.概念查询缓存,就是将查询结果缓存起来,如果遇到相同的Sql查询,直接从缓存中读取结果。例如在一个商城中的商品分类是不会经常变动的,完全可以走缓存,没必要每次从磁盘中读取。【二】.查询缓存开启状态执行Sql:show VARIABLES like &n...
假设有个会员表,auth字段代表拥有的权限,其中1代表查看、2代表修改 、3代表新增 4代表删除,现在需要查询拥有新增权限的用户。先看看会员表:select * from memberid name auth 1 gao 1,2,3 2 chen 3 3 z...
容易忘记备忘。group by x,y的意思是将所有具有相同x字段值和y字段值的记录放到一个分组里。举个栗子: 现在运营部门需要统计用户表每个性别和每个年龄的人数统计,例如男性17岁的20人,男性18岁的10人,女性40岁的1人先看会员表数据:SELECT * ...