MySQL检查行是否包含另一个表

时间:2016-11-10 15:57:27

标签: mysql sql

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

这就是我现在正在尝试的事情:

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

这仍然会找到包含第二个表中的值的行。我也尝试过为LIKE和IN交换EXISTS,它们都返回语法错误。

编辑:

使用%Sign似乎会导致问题。以下是使用百分号时会发生什么的屏幕截图: enter image description here

第二个表中存储的值之一是“Meath”,仍然选择包含“Meath”的行。如果我添加'Meath'而不是'%',则不会返回该行: enter image description here

3 个答案:

答案 0 :(得分:1)

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

这应该符合您的要求。

编辑:如果您只需忽略table2中的某些值,则可以用此替换第二行

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

答案 1 :(得分:0)

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

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

将从外部查询返回的每一行检查您在内部查询的where子句中定义的条件,这与两个查询相关联,否则MySQL无法知道如何检查返回的每一行的存在性外部查询,它将返回任何内容。

答案 2 :(得分:0)

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