工作我厭倦了這個與頭撞牆。到目前爲止,我們團隊中沒有人可以找出爲什麼它不起作用。我不能得到一個正確的加入與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