Mysql 如何通过一个匹配排除更多行
哦,对不起,我不知道如何正确地表达这个主题。 这就是为什么我最好描述一下这个问题 我有一个类似于下表的表格: 创建表(如果不存在)`Test` `Id`INT非空自动增量, `名称'VARCHAR5不为空, `v1`INT不为空, 主键'Id` ; 插入'Test``Name`、'v1` 值'A',4',A',3',B',6',C',1',C',2, “C”,7,“D”,7,“D”,5,“E”,3,“F”,1, "F,2,G,7,H,9,H,1,I,5 ;; 我需要的是找到所有匹配的名称,例如7。 这些是‘C’、‘D’和‘G’ 现在我需要选择除“C”、“D”和“G”之外的所有行。 结果表应该是:Mysql 如何通过一个匹配排除更多行,mysql,sql,Mysql,Sql,哦,对不起,我不知道如何正确地表达这个主题。 这就是为什么我最好描述一下这个问题 我有一个类似于下表的表格: 创建表(如果不存在)`Test` `Id`INT非空自动增量, `名称'VARCHAR5不为空, `v1`INT不为空, 主键'Id` ; 插入'Test``Name`、'v1` 值'A',4',A',3',B',6',C',1',C',2, “C”,7,“D”,7,“D”,5,“E”,3,“F”,1, "F,2,G,7,H,9,H,1,I,5 ;; 我需要的是找到所有匹配的名称,例如7
===============
| Name | v1 |
|–––––––––––––|
| A | 4 |
| A | 3 |
| B | 6 |
| E | 3 |
| F | 1 |
| F | 2 |
| H | 9 |
| H | 1 |
| I | 5 |
|–––––––––––––|
我尝试了以下查询:
选择t1.Name,t1.v1
从'Test'改为t1
参加
从“测试”中选择名称`
其中v1=7
as t2
在t1.Name上!=t2.姓名
但我只是意识到我仍然不理解JOIN语句的机制
希望对这个问题有所帮助。
提前感谢。您可以使用不存在:
这将选择测试中的所有行,其中行上的名称在表中的任何位置都没有带7的行。您可以使用“不存在”:
这将选择测试中的所有行,其中行上的名称在表中的任何位置都没有带7的行。下面介绍如何使用联接
SELECT x.*
FROM test x
LEFT
JOIN test y
ON y.name = x.name
AND y.v1 = 7
WHERE y.id IS NULL;
+----+------+----+
| Id | Name | v1 |
+----+------+----+
| 1 | A | 4 |
| 2 | A | 3 |
| 3 | B | 6 |
| 9 | E | 3 |
| 10 | F | 1 |
| 11 | F | 2 |
| 13 | H | 9 |
| 14 | H | 1 |
| 15 | I | 5 |
+----+------+----+
下面是如何使用联接来执行此操作
SELECT x.*
FROM test x
LEFT
JOIN test y
ON y.name = x.name
AND y.v1 = 7
WHERE y.id IS NULL;
+----+------+----+
| Id | Name | v1 |
+----+------+----+
| 1 | A | 4 |
| 2 | A | 3 |
| 3 | B | 6 |
| 9 | E | 3 |
| 10 | F | 1 |
| 11 | F | 2 |
| 13 | H | 9 |
| 14 | H | 1 |
| 15 | I | 5 |
+----+------+----+
此查询:
SELECT Name FROM Test WHERE v1 = 7
返回要排除的所有名称。
在操作员不在的情况下使用:
看。
结果:
此查询:
SELECT Name FROM Test WHERE v1 = 7
返回要排除的所有名称。
在操作员不在的情况下使用:
看。
结果:
> Id | Name | v1
> -: | :--- | -:
> 1 | A | 4
> 2 | A | 3
> 3 | B | 6
> 9 | E | 3
> 10 | F | 1
> 11 | F | 2
> 13 | H | 9
> 14 | H | 1
> 15 | I | 5