工作我厌倦了这个与头撞墙。到目前为止,我们团队中没有人可以找出为什么它不起作用。我不能得到一个正确的加入与REGEXP mysql
我有两个表格,我需要检查每个行上的行以确保其准确性。
表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'
这将返回正是我期望它。左列中的所有值都在那里,右列中没有匹配的空值。这解决了我需要知道的事情:“表1中哪些城市不在表2中。”
接下来,我需要根据WHERE子句知道table1中哪些城市不在table1中。一个合适的人应该这样做。正确?
但是我无法让它工作,我觉得我已经尝试了查询的每一个可能的排列组合,并且在这个过程中我的家用服务器崩溃了很多次。
为什么不能正常工作?
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 =城市),如果我用=操作不工作(即使在LEFT JOIN我有工作)
当我在phpmyadmin中运行查询时发生的所有事情是服务器保持忙一段时间然后冻结。
至于等号不起作用,这通常是由列值末尾的空格造成的。你可以用像SELECT * FROM fedcodes WHERE feature_name <> TRIM(feature_name)'这样的查询来查找它们。 – 2013-05-07 19:11:17
在第二个查询中,您已颠倒了REGEXP的字符串和模式。 feature_name是否可能包含一些bc.city中没有的额外数据?如果不是,请考虑'='而不是'REGEXP'。 – 2013-05-07 19:26:03
等号不起作用应该让我知道存在更大的问题。我试图修剪在MySQL和PHP,但都没有工作。 – moult86 2013-05-08 22:56:03