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 (...)