2017-08-08 81 views
0

我很難使用MySQL查詢。使用連接刪除行並跳過其中的一些 - MySQL

如果我做到以下幾點:

SELECT ads.id_ad 
FROM tab_ads ads, tab_orders orders 
WHERE (ads.id_user = 111 AND ads.id_ad = orders.id_ad) 

它給了我正確的答案,那就是:「告訴我,已經銷售屬於用戶111的廣告」

我想是刪除所有廣告,但已銷售的廣告除外。

所以我改變了等於不等於在where條件:

SELECT ads.id_ad 
FROM tab_ads ads, tab_orders orders 
WHERE (ads.id_user = 111 AND ads.id_ad != orders.id_ad) 

,這讓我的垃圾結果。

例如: 我有三個表:

tab_ads 
id_ad - title - etc. 
01 - title1 
02 - title2 
03 - title3 

tab_orders 
id_order - id_ad - amount - etc. 
XX   - 01  - $10 

tab_users 
id_user - name - etc. 
110 - Dr. Jivago - etc. 
111 - Sherlock - etc. 

我需要從111(夏洛特)刪除所有廣告那裏沒有賣。所以我需要刪除廣告02 - title2和03 - title3,因爲ad 01 - title1已經售出,我需要保留以備將來諮詢。

+0

所以,你需要從不在訂單表tab_ads返回的記錄。這就是重複主題告訴你如何去做的。 – Shadow

+0

好的,我以前沒有看到。謝謝。 – Raphael

回答

0

你不能在使用和子查詢

select ads.id_ad 
    FROM tab_ads 
    where ads.id_ad not in (
     SELECT ads.id_ad 
     FROM tab_ads ads 
     INNER JOIN tab_orders orders on ads.id_user = 111 AND ads.id_ad = orders.id_ad) 
    ) 
    AND tab_ads.id_user = 111 
+0

謝謝@scaisEdge,但我有完全相同的結果。 – Raphael

+0

對我來說似乎很陌生...解釋得更好..查詢應該返回所有id_ad不在子選擇....如果你的子選擇返回id_ad賣..你應該有不賣 – scaisEdge

+0

我編輯我的問題。 – Raphael