mysql - 在 MySQL 中使用 join 代替该子查询

标签 mysql sql join subquery

我有一个由以下结构和记录组成的表,我想做的就是提取那些状态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/

相关文章:

sql - 如何在 SQL-Server 2014 中将表变量传递给存储过程

php - 选择日期之间的空房情况(sql 查询)

mysql - 在特定情况下在mysql上加入3个表

php - 用于 SQL 注入(inject)性能的最佳函数

mysql - 帮忙写个query : Confusion over order of operations of GROUP BY and ORDER BY

sql - 将多行合并为多列

mysql - 从多个表的单个列中检索数据以充当另一个表的列

sql - TEXT 字段的实际大小 (MySQL)

mysql - MAMP Pro 无法启动 MySQL

join - 如何加入两个Options<Vec<String>>