Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我无法获得使用REGEXP-mysql的正确连接_Mysql_Right Join - Fatal编程技术网

我无法获得使用REGEXP-mysql的正确连接

我无法获得使用REGEXP-mysql的正确连接,mysql,right-join,Mysql,Right Join,我受够了用这个把头撞墙。到目前为止,我们团队中没有人能弄清楚它为什么不起作用 我有两个表,我需要检查每一个表上的行的准确性 表1 feature_name | state_alpha | population data city1 | MI | 34567 city3 | MI | 4567 city4 | MI | 5567 表2 city c

我受够了用这个把头撞墙。到目前为止,我们团队中没有人能弄清楚它为什么不起作用

我有两个表,我需要检查每一个表上的行的准确性

表1

feature_name | state_alpha | population data
city1        |     MI      |          34567
city3        |     MI      |          4567
city4        |     MI      |          5567
表2

city
city1
city2
city3
我已使用左连接来处理此查询:

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子句,我需要知道表2中哪些城市不在表1中。右连接应该可以做到这一点。对吗

然而,我无法让它工作,我觉得我已经尝试了所有可能的查询排列,并在这个过程中崩溃了我的家庭服务器好几次

为什么这样不行

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\u name=city中的行名称相同,但如果使用=运算符,即使在我使用的左连接中也不起作用

当我在phpmyadmin中运行查询时,发生的一切是服务器保持忙碌一段时间,然后冻结

尝试嵌套fedcodes,使用它只需要的其他WHERE子句:


可能是您的查询在对空值执行匹配时遇到问题?

只需翻转连接顺序即可

 SELECT f.feature_name, f.population_data, f.state_alpha, bc.city
   FROM bob_cities as bc
   LEFT JOIN `fedcodes` as f ON   ON bc.city  REGEXP concat( f.feature_name )
   ...
这应该行得通

如果你用一个查询来破坏mySQL,你应该考虑向MySQL团队报告一个bug。

尝试修复第二个查询的ReXEP部分以匹配第一个:

SELECT f.feature_name, f.population_data, f.state_alpha, bc.city
FROM `fedcodes` AS f
RIGHT JOIN bob_cities AS bc ON bc.city REGEXP f.feature_name
...
更好的方法是使用LOCATE假设=不起作用,=甚至更好:

SELECT f.feature_name, f.population_data, f.state_alpha, bc.city
FROM `fedcodes` AS f
RIGHT JOIN bob_cities AS bc ON 0 < LOCATE(TRIM(f.feature_name), TRIM(bc.city))
...

记住,REGEXP通常需要一个模式。它比包含或等于要复杂得多

首先,我要感谢大家的回应。我尝试了你们建议的一切,但都没用。但事实证明,这毕竟不是问题所在。这就是为什么我试过的都不管用

一名团队成员发现数据库中的数据不知何故已损坏。我不确定细节,但数据的来源是CSV,他说里面不好。他给了我一份新的CSV副本,我用它重新创建了数据库,一切正常

以下是工作查询:

SELECT DISTINCT f.feature_name, f.population_data, b.city
FROM `fedcodes` f
RIGHT JOIN bob_cities_fix b ON f.feature_name = b.city
AND f.population_data =0
AND f.state_alpha = "al"
书的正确连接方式正是它所需要的

您可能会注意到,在最初的查询中,我过滤了1000多个城市的数据,结果发现我需要在数据库中找到没有人口的城市,以便进行正确的连接,以准确地返回我需要的数据


然而,一旦我从查询中得到反馈,而不是冻结PHPmyadmin,这是一个简单的修复方法

至于等号不起作用,这通常是由列值末尾的空格引起的。您可以使用类似SELECT*的查询从fedcodes WHERE feature\u name TRIMfeature\u name找到它们。在第二个查询中,您已反转了REGEXP的字符串和模式。功能名称中是否可能包含一些bc.city没有的额外数据?如果不是,考虑= = ReXEP。不工作的符号应该告诉我有一个更大的问题。我尝试过在mysql和PHP中进行微调,但都不起作用。
SELECT DISTINCT f.feature_name, f.population_data, b.city
FROM `fedcodes` f
RIGHT JOIN bob_cities_fix b ON f.feature_name = b.city
AND f.population_data =0
AND f.state_alpha = "al"