我正在尝试获取正确的记录,但出于某种原因,我猜我在 Have 子句中有一些问题,有人可以帮我吗?
案例 1: 尝试选择 order_id = 1(新订单)但不应有超过 1 条具有相同订单 ID 的记录的行
案例2: 选择order_id = 2(打印订单)的行,但也应该选择新订单并应用案例1,换句话说,查询应该选择where order_id=2 OR where order_id=1 if(order_id = 1 then should not have more超过 1 条具有相同订单 ID 的记录)
我有一张表,其中:
order_id = 订单的 id
status_id = 不同的状态 id 例如 1 = 新,2 = 打印,3 = 处理等...
status_change_by = 将订单状态从新更改为打印到的管理员的 id加工...
order_id | status_id | status_change_by
1 | 1 | (NULL)
1 | 2 | 12
1 | 3 | 12
2 | 1 | (NULL)
3 | 1 | (NULL)
4 | 1 | (NULL)
1 | 4 | 13
5 | 1 | (NULL)
3 | 2 | (NULL)
这是我的简单 mySQL 查询:
SELECT * from order_tracking
where status_id = 1
group by order_id
having count(order_id) <= 2;
我什至创建了 SQL fiddle 以供参考,请检查我是否做错了,或者我需要使用 CASE 或 IF 语句进行复杂查询?
http://sqlfiddle.com/#!2/16936/3
如果此链接不起作用,请通过以下代码创建一个:
CREATE TABLE order_tracking
(
track_id int auto_increment primary key,
order_id int (50),
status_id int(20),
status_changed_by varchar(30)
);
这是插入:
INSERT INTO order_tracking
(order_id, status_id, status_changed_by)
VALUES
(1,1,''),
(1,2,12),
(1,3,12),
(2,1,''),
(3,1,''),
(4,1,''),
(1,4,13),
(5,1,''),
(3,2,'');
应感谢您最早的回复!谢谢你的时间。
期望结果:
案例:1这很简单,结果应该是这样的:只有不超过 1 条记录的新订单
Order_id | status_id | status_changed_by
2 | 1 | (NULL)
4 | 1 | (NULL)
3 | 1 | (NULL)
案例2结果:
Order_id | status_id | status_changed_by
1 | 4(max id)| (NULL)
2 | 1 | (NULL)
4 | 1 | (NULL)
3 | 2(max id)| (NULL)