簡體   English   中英

MYSQL SELECT WHERE CLAUSE-排除行

[英]MYSQL SELECT WHERE CLAUSE - exclude rows

在MYSQL中,假設我有以下兩個表。

“命令”:

id   |    name    | customer_id |    type   |  id_fabric
--------------------------------------------------------
1    | "P1601"    |      0      |     1     |    1    
2    | "M6451"    |      0      |     2     |    2    
3    | "T8200"    |      8      |     1     |    1    
4    | "R7441"    |      0      |     2     |    2    
5    | "S8018"    |      2      |     1     |    3    
6    | "P1240"    |      7      |     1     |    3    

“面料”:

id    |  color  |  remaining 
----------------------------
1     | black   |  3.40 
2     | red     |  16 
3     | navy    |  12 

我想創建一個查詢以僅檢索剩余大於5的面料,這些面料沒有任何customer_id = 0的訂單,並且其訂單類型不等於2

因此,在這種情況下,結果將是:

id  | color   |  remaining
------------------------------------------------
3   | navy    |  12

我已經嘗試通過使用以下Sql查詢來實現這一點,但沒有得到預期的結果:

SELECT
    color,
    remaining
FROM
    fabrics
LEFT JOIN orders ON id_fabric = id
WHERE
    remaining > 2 AND id IN(
    SELECT
        id_fabric
    FROM
        orders
    WHERE
        type != 2 AND customer_id != 0
)
GROUP BY
    id

任何想法 ?

使用NOT EXISTS

SELECT
    f.color,
    f.remaining
FROM fabrics f
WHERE f.remaining > 5 AND 
    NOT EXISTS(
        SELECT 1
        FROM orders o
        WHERE o.id_fabric = f.id AND
              o.type = 2 AND o.customer_id = 0
    )

請注意,原始查詢中也可以省略JOIN和GROUP BY。

嘗試如下

SELECT
    color,
    remaining
FROM
    fabrics
 JOIN orders ON id_fabric = id
where customer_id!=0 and remaining>5 and type!=2

使用JOINWHERE條件和“ GROUP BY”

id在兩個表中都相同,因此對表使用alies名稱。

select f.id,f.color,f.remaining
from fabrics f
join orders o on o.id_fabric  = f.id
where f.remaining > 2 and o.type !=2 and o.customer_id!=0
group by f.id

在這種情況下,我認為不需要在需要條件的地方進行子選擇。 你可以簡單地像

SELECT
    color,
    remaining
FROM
    fabrics
LEFT JOIN orders ON id_fabric = id
WHERE
    remaining > 2  
    AND customer_id!=0
    AND type != 0
GROUP BY
    id 

您可以嘗試使用相關子查詢

SELECT
    color,
    remaining
FROM
    fabrics
LEFT JOIN orders ON id_fabric = id where remaining > 5 and 
not exists (select 1 from orders o where o.id_fabric=fabrics.id and o.customer_id=0 and o.type=2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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