2017-08-08 38 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