[英]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
使用JOIN
和WHERE
條件和“ 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.