簡體   English   中英

在 MySQL 中使用 join 代替此子查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM