2014-11-25 49 views
0

当我尝试此查询:的MySQL不等于运营商不工作

SELECT * 
FROM sds_posts 
WHERE topic_id = '2439' 
    AND author = ANY (SELECT mid 
        FROM sds_actions 
        WHERE whoami = '710' AND type = 'block') 
    AND status = '1' 
    AND deleted = '0' 
ORDER BY 
    id ASC 
LIMIT 50 

是否正常工作。

但我需要这一个:

SELECT * 
FROM sds_posts 
WHERE topic_id = '2439' 
    AND author <> ANY (SELECT mid 
        FROM sds_actions 
        WHERE whoami = '710' AND type = 'block') 
    AND status = '1' 
    AND deleted = '0' 
ORDER BY 
    id ASC 
LIMIT 50 

这一次的查询必须选择第一次查询的对面,但它仅仅是选择所有作者。我试过!=NOT IN,但结果是一样的。

那么为什么?为什么<>无法按预期工作?

+0

如果“任何“作品,也许反转内部选择将工作:'选择*从sds_posts WHERE topic_id ='2439'和作者=任何(SELECT mid从sds_actions WHERE whoami <>'710'或类型<>'块')AND状态=' 1'并删除='0'通过ID ASC LIMIT 50'订购 – outlyer 2014-11-25 04:07:58

回答

2

我认为,改变

and author = any... 
to 
and NOT author = any... 

会工作......但如果没有,那么我会尝试做一个左联接和寻找空。由于笔者是从sds_actions的“中”,我把它写成...

SELECT 
     sp.* 
    FROM 
     sds_posts sp 
     LEFT JOIN sds_actions sa 
      on sp.author = sa.mid 
      AND sa.whoami = '710' 
      AND sa.type = 'block' 
    WHERE 
      sp.topic_id = '2439' 
     AND sp.status = '1' 
     AND sp.deleted = '0' 
     AND sa.mid IS NULL 
    ORDER by 
     sp.id ASC 
    LIMIT 50 
+0

我尝试了第一个,它工作!非常感谢! – 2014-11-25 16:32:01

0

你可以试着改变author = any(...)author IN (...)

,改变author <> any(...)author NOT IN (...)