mySQL查询忽略NOT IN函数

时间:2013-01-12 01:09:28

标签: mysql

此查询正在处理和运行,但它完全忽略了NOT IN部分

SELECT * FROM `offers` as `o` WHERE `o`.country_iso = '$country_iso' AND `o`.`id` 
not in (select distinct(offer_id) from aff_disabled_offers 
where offer_id = 'o.id' and user_id = '1') ORDER by rand() LIMIT 7

2 个答案:

答案 0 :(得分:2)

也许您的“不在”查询中不会返回任何内容。

不应该

where offer_id='o.id'

where offer_id=o.id

答案 1 :(得分:0)

guido有答案......看起来你打算创建一个相关的子查询。 'o.id'被视为文字。

一些小心:

您通常需要某种保证NOT IN谓词中的子查询不返回NULL值。如果您没有从数据库强制执行该保证,则在子查询中添加WHERE/HAVING return_expr IS NOT NULL就足以为您提供该保证。

那个相关的子查询将在大型集合中吃掉你的午餐,表现明智。和ORDER BY一样rand()。

通常,反连接模式在大型集合上效率更高:

SELECT o.*
  FROM offers o
  LEFT
  JOIN aff_disabled_offers d
    ON d.user_id = '1'
   AND d.offer_id = o.id
 WHERE d.offer_id IS NULL
   AND o.country_iso = '$country_iso'
 ORDER BY rand()
 LIMIT 7