使用join删除行并跳过其中一些 - MySQL

时间:2017-08-08 19:13:09

标签: 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(Sherlock)中没有卖出的所有广告。所以我需要删除广告02 - title2和03 - title3,因为广告01 - title1已经售出,我需要保留它以供将来咨询。

1 个答案:

答案 0 :(得分:0)

您可以使用not in和subselect

  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