我有一个由以下结构和记录组成的表,我想做的就是提取那些状态id为1或2的记录的orderid,我想排除所有statusid = 3的orderid,问题是orderid 106 同时具有状态 1 和 3 ... 我写了一个子查询来达到目的..
select *
from orders_status_history
where orders_id NOT IN
(select orders_id
from orders_status_history
where orders_status_id = 3)
有没有其他方法可以在不使用子查询的情况下执行此操作,因为我听说它会影响性能。因为我的查询也可以返回数千行。
id order-id status-id
1 1 1
2 2 1
3 105 1
4 106 1
5 106 3
6 108 1
7 109 1
8 109 2
任何帮助或建议将不胜感激..提前致谢..
最佳答案
你可以这样做:
SELECT osh.*
FROM orders_status_history osh
LEFT JOIN
orders_status_history oshd
ON oshd.orders_id = osh_orders_id
AND oshd.orders_status_id = 3
WHERE oshd.orders_id IS NULL
但是,如果您在 order_status_history (orders_id,orders_status_id)
上有索引,则 NOT IN
查询也同样可以。
您可能想阅读以下内容:
关于mysql - 在 MySQL 中使用 join 代替该子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761770/