(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严格模式,会直接报错,养成良好的习惯。