2016-11-10 106 views
1

我需要检查MySQL表中的行是否包含存储在另一个表中的值。MySQL检查行是否包含来自另一个表的值

这就是我想现在:

SELECT * FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE Column = '%'); 

这仍然发现其中的确包含在第二个表中的值的行。我也尝试交换EXETS LIKE和IN,它们都返回语法错误。

编辑:

使用%Sign似乎会导致问题。下面是我使用百分号会发生什么一些截图: enter image description here

一个存储在第二表中的值是“米斯”,载“米斯”行仍处于选中状态。如果我想补充的,而不是“%”米斯',那么该行不会返回: enter image description here

+0

你需要指定两个表之间的关系代替第二线。 –

+0

您在table1和table2之间检查的列的名称是什么? – Sam07

+0

@Sam这个列被称为县,对不起,我只是把例子的通用名称 – Edward144

回答

1
SELECT * FROM table1 a 
WHERE a.County NOT IN(SELECT County FROM table2) 

这应该符合你想要的。

编辑:如果你只需要忽略从表2特定的值,你可以用这个

WHERE a.County NOT IN(SELECT County FROM table2 WHERE County IN('county1', 'county2')) 
+0

完美的工作,你能解释一下'a'是什么,它只是一个可能是任何价值的变量吗? – Edward144

+0

你并不真的需要这些,这只是我的习惯。 'FROM table1 a'使'a'成为一种别名(我不知道适当的名词),你可以在其余的查询中使用它。你在哪里看到'a.County',就像说'table1.County'一样。这对使用具有相同列名的表的查询很有帮助。 – Sam07

+0

原来它实际上叫做别名,哈哈。这可能会有帮助,如果我的解释不是:[链接](https://en.wikipedia.org/wiki/Alias_(SQL)) – Sam07

0

您需要定义某种这两个查询之间的关系,例如

SELECT * FROM table1 
WHERE NOT EXISTS (SELECT * 
        FROM table2 
        WHERE Column = '%' 
        AND table1.Column = table2.Column); --<-- Relate two queries 

返回的每个行从外部查询将检查你在内部查询的where子句中定义的条件,这涉及两个查询,否则MySQL无法知道如何检查外部查询返回的每一行的存在,它会什么都没有回来。

+0

这还是返回包含第二个表中值的行。只有在使用%符号时,如果我将其更改为行所具有的特定值,那么它不会显示出来,有什么想法? – Edward144

+0

@ Edward144那么解释第二个表中存在的行是什么意思?换句话说,你如何确定一个行是否存在于第二个表中? –

+0

我已经使用屏幕截图更新了我的帖子,以显示发生了什么。我迷惑了一下自己,我认为 – Edward144

0
SELECT * FROM table1 
WHERE column NOT IN (SELECT column FROM table2 
       WHERE Column = '%'); 
相关问题