[英]MYSQL:Where not exists syntax error
我想知道如何在mysql中使用WHERE NOT EXISTS
進行以下查詢。它給出了mysql語法錯誤。我嘗試了所有可能的方法,但沒有任何幫助。
SELECT *
FROM (
(
SELECT l.pid
FROM lineitem l
WHERE l.oid IN (
SELECT o1.oid
FROM customer c
JOIN (
SELECT o.oid,
o.cid
FROM orders o
) o1
ON c.cid=o1.cid
AND c.city='Newark'
)
GROUP BY l.pid
)
WHERE not exists (
SELECT l.pid
FROM lineitem l
WHERE l.oid IN (
SELECT o1.oid
FROM customer c
JOIN (
SELECT o.oid,
o.cid
FROM orders o
)o1
ON c.cid=o1.cid
AND c.city<>'Newark'
)
)
)
我的表是:客戶(cid,名稱,城市,州)訂單(oid,cid,date)產品(pid,price,productname)lineitem(蓋子,數字,oid,pid,totalprice)
我想選擇僅由紐瓦克人購買的所有產品。我的邏輯是(選擇紐瓦克客戶購買的產品) - (選擇所有其他客戶購買的產品)。我使用WHERE NOT EXISTS
因為差異關鍵字不可用MySQL的。
這是一個更好的解決方案:
SELECT ProductID FROM (
SELECT p.pid ProductID
FROM lineitem l
JOIN product p
ON l.pid = p.pid
JOIN orders o
ON l.oid = o.oid
WHERE o.cid IN (
SELECT c.cid
FROM customer c
WHERE c.city = 'Newark'
)
) t1
WHERE ProductID NOT IN (
SELECT p.pid
FROM lineitem l
JOIN product p
ON l.pid = p.pid
JOIN orders o
ON l.oid = o.oid
WHERE o.cid IN (
SELECT c.cid
FROM customer c
WHERE c.city <> 'Newark'
)
);
我也相信,由於嵌套查詢較少,因此在性能方面會更好。
您的查詢中的問題是括號。 你說
SELECT *
FROM (
( ... )
WHERE NO EXISTS
( ... )
);
你應該說
SELECT *
FROM ( ... )
WHERE NO EXISTS ( ... );
由於它的工作原理,這里有一個進一步的簡化(刪除派生表t1
和第二部分子查詢中的JOIN product p
):
SELECT p.pid ProductID
FROM lineitem l
JOIN product p
ON l.pid = p.pid
JOIN orders o
ON l.oid = o.oid
WHERE o.cid IN (
SELECT c.cid
FROM customer c
WHERE c.city = 'Newark'
)
AND p.pid NOT IN (
SELECT l.pid
FROM lineitem l
JOIN orders o
ON l.oid = o.oid
WHERE o.cid IN (
SELECT c.cid
FROM customer c
WHERE c.city <> 'Newark'
)
);
Select l.pid from lineitem l
inner join Orders o on l.oid = o.oid
inner join Customers c on o.cid = c.cid and c.city = 'Newark'
where not in
(
Select ol.pid from lineitem ol
inner join Orders oo on ol.oid = oo.oid
inner join Customers oc on oo.cid = oc.cid and oc.city <> 'Newark'
)
我認為......如果不存在則需要相關的子查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.