选择查询-mysql

dPd*_*dms 1 mysql sql select

如果我有一个表,如:

     name1       |    name2     |    id     |
+----------------+--------------+-----------+
| A              | E            | 1         |
| A              | F            | 1         |
| B              | G            | 1         |
| C              | H            | 1         |
| D              | I            | 1         |
| A              | J            | 2         |
| B              | K            | 2         |
| C              | L            | 2         |
| D              | M            | 2         |
| A              | N            | 2         |
Run Code Online (Sandbox Code Playgroud)

我需要的是选择id的所有行,其中name2 <>'E'

如果我做:

selete * from table where name2 <> 'E'
Run Code Online (Sandbox Code Playgroud)

它只给了我这个

     name1       |    name2     |    id     |
+----------------+--------------+-----------+
| A              | F            | 1         |
| B              | G            | 1         |
| C              | H            | 1         |
| D              | I            | 1         |
| A              | J            | 2         |
| B              | K            | 2         |
| C              | L            | 2         |
| D              | M            | 2         |
| A              | N            | 2         |
Run Code Online (Sandbox Code Playgroud)

我想要的结果是(排除包含name2 ='E'的所有id行至少一次):

     name1       |    name2     |    id     |
+----------------+--------------+-----------+
| A              | J            | 2         |
| B              | K            | 2         |
| C              | L            | 2         |
| D              | M            | 2         |
| A              | N            | 2         |
Run Code Online (Sandbox Code Playgroud)

我应该使用哪个查询?

dot*_*tom 5

一种方法是使用子查询查找列中具有值"E"的所有ID,name2然后过滤掉所有这些ID:

SELECT * 
FROM table 
WHERE id NOT IN 
    ( SELECT DISTINCT id FROM table WHERE name2 = 'E' )
Run Code Online (Sandbox Code Playgroud)