我厌倦了用这个把头撞到墙上。到目前为止,我们团队中的任何人都无法弄清楚它为什么不起作用。
我有两个表,我需要在每个表上相互检查行以确保准确性。
表格1
feature_name | state_alpha | population data
city1 | MI | 34567
city3 | MI | 4567
city4 | MI | 5567
表2
city
city1
city2
city3
我已经得到了 LEFT JOIN 来处理这个查询:
SELECT f.feature_name, f.population_data, f.state_alpha, bc.city
FROM `fedcodes` AS f
left JOIN bob_cities AS bc ON bc.city
REGEXP concat( f.feature_name )
WHERE f.population_data >1000
AND f.state_alpha = "MI"
AND f.feature_name NOT
REGEXP 'city of'
AND f.feature_name NOT regexp 'town of'
这完全符合我的预期。左列中的所有值都存在,右列中没有匹配项的值为 NULL。这解决了我需要知道的问题:“table1 中的哪些城市不在 table2 中。”
接下来我需要根据 WHERE 子句知道 table2 中哪些城市不在 table1 中。一个 RIGHT JOIN 应该这样做。正确的?
但是我无法让它工作,我觉得我已经尝试了所有可能的查询排列,并且在这个过程中我的家庭服务器崩溃了很多次。
为什么这不起作用?
SELECT f.feature_name, f.population_data, f.state_alpha, bc.city
FROM `fedcodes` AS f
RIGHT JOIN bob_cities AS bc ON f.feature_name
REGEXP concat( bc.city )
WHERE f.population_data >1000
AND f.state_alpha = "MI"
AND f.feature_name NOT
REGEXP 'city of'
AND f.feature_name NOT regexp 'town of'
我也试过这个。
SELECT f.feature_name, f.population_data, f.state_alpha, bc.city
FROM `fedcodes` AS f
RIGHT JOIN bob_cities AS bc ON (f.feature_name
REGEXP concat( bc.city )
AND f.population_data >1000
AND f.state_alpha = "MI"
AND f.feature_name NOT
REGEXP 'city of'
AND f.feature_name NOT regexp 'town of')
我正在使用 REGEXP,因为即使两个表中的行中的名称相同(feature_name = city),如果我使用 = 运算符它也不起作用(即使在我工作的 LEFT JOIN 中)
当我在 phpmyadmin 中运行查询时发生的所有事情都是服务器保持忙碌一段时间然后冻结。