删除字段内的空间以匹配mysql

删除字段内的空间以匹配mysql,mysql,phpmyadmin,Mysql,Phpmyadmin,我有一个问题 SELECT course_locations.id as locId, courses.arrangements as arrangementStatus FROM course_locations LEFT JOIN courses ON course_locations.course_id = courses.id LEFT JOIN providers ON course_locations.provider_id =

我有一个问题

   SELECT 
     course_locations.id as locId,
     courses.arrangements as arrangementStatus
   FROM course_locations
     LEFT JOIN courses ON course_locations.course_id = courses.id
     LEFT JOIN providers ON course_locations.provider_id = providers.id
     LEFT JOIN product_types ON product_types.id = courses.product_type_id
   WHERE 
     courses.arrangements ='0'
     AND providers.activated = 1
     AND course_locations.published_status ='1'
     AND course_locations.postcode IN(
                      SELECT 
                       DISTINCT(Postcode) as post 
                      FROM coordinaten 
                      WHERE FK_Provincie ='10' 
                       AND Latitude IS NOT NULL 
                       AND Longitude IS NOT NULL)
我面临的问题是子查询

    SELECT DISTINCT(Postcode) as post 
    FROM coordinaten 
    WHERE FK_Provincie ='10' 
    AND Latitude IS NOT NULL 
    AND Longitude IS NOT NULL
为我提供类似以下内容的结果
'2222AD'、'1111AE'、'2542DR'
。 但是course_locations.postcode的值类似于这样的
'2222 AD','1111 AE','2542 DR'
。 它在数字和字母之间有空格,所以当我查询时,我无法得到指定的结果。 如果字段之间有空格或没有空格,是否有任何方法可以获得匹配。 我不能使用like,因为值是以逗号的形式从子查询中分离出来的。 如果有人知道这个问题,请告诉我。您可以使用该功能

返回字符串str,其中包含来自\u str的所有字符串 替换为字符串至\u str。REPLACE()执行区分大小写的命令 从搜索时匹配

您的子查询将类似于:

SELECT DISTINCT(REPLACE(Postcode, ' ', '')) as post                                                                          FROM coordinaten
WHERE FK_Provincie ='10'
AND Latitude IS NOT NULL
AND Longitude IS NOT NULL

示例Fiddle:

正确的方法是清理数据,因此邮政编码格式是一致的

UPDATE [sometable] SET postcode=REPLACE(postcode,' ','');
从邮政编码中删除空格

如果没有这个选项,您可以这样做

... WHERE REPLACE(table_A.postcode,' ','') = REPLACE(table_B.postcode,' ','')
但这样做效率较低,因为每次比较都必须进行替换,而且会破坏索引

当然,您只需对邮政编码中可能有空格的表进行替换