我需要检查MySQL表中的行是否包含存储在另一个表中的值。
这就是我现在正在尝试的事情:
SELECT * FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE Column = '%');
这仍然会找到包含第二个表中的值的行。我也尝试过为LIKE和IN交换EXISTS,它们都返回语法错误。
编辑:
使用%Sign似乎会导致问题。以下是使用百分号时会发生什么的屏幕截图:
第二个表中存储的值之一是“Meath”,仍然选择包含“Meath”的行。如果我添加'Meath'而不是'%',则不会返回该行:
答案 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 = '%');