1

我需要做一个 mySQL 查询,但不确定格式应该是什么。

这是情况,我有一个包含字段的表 - id、name、type

我将使用类似于以下的查询从表中获取结果:

SELECT * FROM table WHERE type='1'

但是,我有一个来自另一个查询的 ID 列表。这些是应从结果中排除的项目。

我确信答案很简单,但我对 mySQL 查询的了解还不够,无法找到答案。

4

2 回答 2

5

一个简单的 NOT IN 将是您想要的 :) 它可以让您发送一个值列表并确保它不在其中 :)

SELECT * FROM table WHERE ID NOT IN (1,2,3)

您也可以使用子查询来执行此操作,例如:

SELECT id FROM table WHERE ID NOT IN (SELECT id FROM table2 WHERE type = 1)
于 2012-06-23T02:52:55.460 回答
3

您可以使用NOT IN这样的查询:

SELECT * FROM `table` WHERE `type`=1 WHERE `id` NOT IN (SELECT `blocked_ids` FROM `block`);

因此,您将在block表中阻止 ID!希望这可以帮助!:)

考虑这张表:

+----+-------------+
| id | name        |
+----+-------------+
|  1 | America     |
|  2 | Europe      |
|  3 | India       |
|  4 | Japan       |
|  5 | Brazil      |
|  6 | Switzerland |
|  7 | Syria       |
|  8 | Wales       |
|  9 | Taiwan      |
| 10 | Zaire       |
+----+-------------+

和被封锁的桌子:

+-----+
| IDs |
+-----+
|   1 |
|   4 |
|   6 |
|   8 |
|   9 |
+-----+

现在,当我提出如下查询时:

SELECT * FROM `countries` WHERE `id` NOT IN (SELECT * FROM `blocked`);

我得到这个结果:

+----+--------+
| id | name   |
+----+--------+
|  2 | Europe |
|  3 | India  |
|  5 | Brazil |
|  7 | Syria  |
| 10 | Zaire  |
+----+--------+

希望这可以帮助!:)

于 2012-06-23T02:56:42.867 回答