在MySQL中使用join代替此子查询
我有一个由以下结构和记录组成的表,我只想提取状态id为1或2的记录的orderid,我想排除所有状态id为3的orderid,问题是orderid 106同时具有状态1和3。。。 我已经写了一个子查询,用于此目的在MySQL中使用join代替此子查询,mysql,sql,join,subquery,Mysql,Sql,Join,Subquery,我有一个由以下结构和记录组成的表,我只想提取状态id为1或2的记录的orderid,我想排除所有状态id为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
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\u status\u history(orders\u id,orders\u status\u id)
上有一个索引,那么NOT IN
查询也可以
您可能需要阅读以下内容:
select orders_id from orders_status_history where orders_status_id <> 3
从订单\u状态\u历史记录中选择订单\u id,其中订单\u状态\u id 3
请尝试此操作,我希望它对Thnx有所帮助,但它不起作用,因为它返回所有记录,除了statusid为3的记录,但有一条记录同时具有statusid,即106同时具有1和3……尝试连接两个表
从osh1上的订单状态历史osh1加入订单状态历史osh2中选择osh1.orders\U id=osh2.orders\U id,其中订单状态\U id 3Thnx很多先生。。它帮了我的忙。。。我只能说Thnx Thnx Thnx Thnx