如果找到例如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但是我收到零回报。
答案 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错误,请更正并重试。