WHERE('field'<> value)的sql问题

时间:2011-06-26 13:13:04

标签: mysql sql

我有两个sql查询,一个用于检索给定主题ID的所有事件记录,另一个用于检索除给定主题ID之外的所有事件记录,但没有。

第一个查询检索正确的记录

SELECT `events`.* 
FROM `events` INNER JOIN events_topics ON events.id = events_topics.event_id
WHERE (events_topics.topic_id = 75)

应该排除事件的第二个查询不排除任何。

SELECT `events`.* 
FROM `events` INNER JOIN events_topics ON events.id = events_topics.event_id 
WHERE (events_topics.topic_id <> 75)

5 个答案:

答案 0 :(得分:4)

这意味着,对于给定的事件,您在topic_id中有其他events_topic值。 A.k.a.,如果您有topic_id = 75topic_id = 33,例如eventid = 45,,则会返回此eventid,因为查询在topic_id = 33上匹配

你问过:

  

“向我提供topic_id&lt;&gt; 75不存在的所有事件”

将查询更改为EXISTS / NOT EXISTS,这是正确的。这是:

  

“给我所有不存在topic_id = 75的事件”

SELECT `events`.* 
FROM `events`
WHERE
    EXISTS (SELECT * FROM events_topics.event_id
            WHERE events_topics.topic_id = 75
                     AND
                      events.id = events_topics.event_id
            )


SELECT `events`.* 
FROM `events`
WHERE
    NOT EXISTS (SELECT * FROM events_topics.event_id
            WHERE events_topics.topic_id = 75
                     AND
                      events.id = events_topics.event_id
            )

答案 1 :(得分:3)

也许是这样的:

select * from Events
where id not in (select event_id from events_topics where topic_id=75)

答案 2 :(得分:2)

您的尝试显示所有事件(主题未显示),只删除主题ID = 75的事件 - 主题组合。所有其他主题(ID <&lt;&gt; 75)仍然存在,因此任何主题为7或63或其他任何事件的事件仍会显示。

您只是设法不显示其唯一主题为id 75的事件。

但我认为您希望没有任何主题的事件具有id = 75:

SELECT events.* 
FROM events 
  LEFT JOIN events_topics
    ON events.id = events_topics.event_id
    AND events_topics.topic_id = 75
WHERE events_topics.event_id IS NULL

我认为上述内容与您拥有的NOT EXISTSNOT IN版本相同。他们的区别只在于绩效。

答案 3 :(得分:0)

尝试使用'75'代替75

SELECT `events`.*  
FROM `events` 
INNER JOIN events_topics ON events.id =        events_topics.event_id  
WHERE (events_topics.topic_id <> '75')

答案 4 :(得分:0)

你的查询没有任何冲突,但请确保数据..以及为什么你在这个`events ??

之外的事件中有单引号

检查这些

 select events.id from events where events.id <> 75

 select events_topics.event_id from events_topics where events_topics.event_id <> 75

如果这些提供了正确的数据,请尝试这种方式

  SELECT events.* 
  FROM events
  INNER JOIN events_topics  ON events.id = events_topics.event_id and    
   events_topics.topic_id <> 75