(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严格模式,会直接报错,养成良好的习惯。
where与having非常类似.都能筛选数据.表达式完全一致. 但是职责的确不同.where负责对表中的字段进行筛选,having负责对where筛选后的结果集再次筛选。这也就是where不能使用别名字段来筛选的原因,因为数据中没有这个字段。&n...
Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。Right join:即右连接,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表...
我们从一个结果集中查询信息一般都是select * from (select...),每次都要编写from (select...)非常麻烦,于是我们将结果集保存起来,这就是视图的便利。创建视图的命令为:create view &nb...
1.floor(x)返回小于x的整数,向下取整,用法,商品的价格是浮点型的,需要向下取整 eg:select id,title,floor(price) from shopgoods2.rand()返回0-1之间的随机数 select rand() select rand()...
(1).首先我们需要了解limit分页的工作流程demo: SELECT * FROM table LIMIT 10000,5 通常我们会认为以上SQL会从10000条后面取5条,正确的是取出10005条,然后再抛弃前...
海量表,数据量较大,并且每个字段的值具有唯一性。如果你创建的海量表只是数据多,索引是毫无意义的。构建海量时我们要使用存储过程。学习自韩顺平(1).创建一个测试数据库create database testdb;set names gbk;use testdb(2).创建dep...