[英]Using join in place of this sub-query in MySQL
我有一个由以下结构和记录组成的表,我要做的就是提取那些状态 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
查询也一样好。
您可能想阅读以下内容:
我想知道为什么您使用子查询,而您可以使用以下查询
select orders_id from orders_status_history where orders_status_id <> 3
请试试这个,希望对你有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.