0

此查询正在处理和运行,但它完全忽略了 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
4

2 回答 2

2

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

不应该

where offer_id='o.id'

where offer_id=o.id

?

于 2013-01-12T01:18:58.023 回答
0

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

一些注意事项:

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

那个相关的子查询会在大集合上吃掉你的午餐,性能方面。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
于 2013-01-12T01:25:46.973 回答