我怎样才能得到WHERE id IN(...)的反面?

时间:2012-03-27 00:12:47

标签: php mysql

如果找到例如204720966837,则以下查询查找表ids并返回id。 我的问题是我该如何反其道而行之?我想显示那些未找到的id的ID。

SELECT id FROM ids WHERE id IN  ('204720966837', '163700377960', '24583115900', '1081617368').

现在我将 204720966837 保存在ids中,这就是它打印的内容。我的目标是打印 163700377960,24583115900,1081617368

while($assoc = mysql_fetch_assoc($query)) {
    echo $assoc['id'];   
}

我已经尝试过NOT但是我收到零回报。

7 个答案:

答案 0 :(得分:3)

您可以使用临时表:

CREATE TEMPORARY TABLE temp_table (id int);

INSERT INTO temp_table(id) VALUES('204720966837'), ('163700377960'), ('24583115900'), ('1081617368');

SELECT id FROM temp_table WHERE id NOT IN(SELECT id FROM ids)

DROP TABLE temp_table;

答案 1 :(得分:3)

我猜想你想要:

SELECT id
FROM
  ( SELECT 204720966837 AS id
      UNION ALL
    SELECT 163700377960
      UNION ALL
    SELECT 24583115900
      UNION ALL
    SELECT 1081617368 
  ) AS tmp
WHERE id NOT IN
      ( SELECT id FROM ids )

答案 2 :(得分:2)

在php中进行比较可能更容易。

$id_list = array('204720966837', '163700377960', '24583115900', '1081617368');

$result = mysql_query('SELECT id FROM ids WHERE id IN  (' . implode(',', $id_list) . ')');
$found = array();
while ($row = mysql_fetch_assoc($result)) {
  $found[] = $result['id'];
}
$diff = array_diff($id_list, $found);

$diff将包含您要搜索的ID,但未找到。

答案 3 :(得分:1)

NOT IN仅在您返回一组时才有效。

尝试

SELECT id FROM ids WHERE id NOT IN (SELECT '204720966837', '163700377960', '24583115900', '1081617368')

有关此主题的全面讨论,请参阅MySQL "NOT IN" query

答案 4 :(得分:0)

TRY

SELECT id FROM ids 
WHERE id != '204720966837' 
AND id != '163700377960'
AND id !='24583115900' 
AND id !='1081617368' 

答案 5 :(得分:0)

我敢打赌

 WHERE IN ()

也不起作用。

试一试,这应该引导您找到解决方案。

答案 6 :(得分:0)

Not IN 始终使用子查询,可能是您的 Not IN syntex错误,请更正并重试。