MySQL INNER JOIN ...过滤重复和不匹配...邮编加入

时间:2010-08-16 11:53:47

标签: mysql

问题

我在邮政编码上加入了两张桌子。我只有上半年的数据。问题是我的用户表中有CM16 6BY,它与我的邮政编码表中的CM1和CM16相匹配。显然我只希望它与CM16匹配,但我不能写一个查询来这样做。我确定我做的事情很愚蠢,但我被困住了。有人可以帮忙吗?非常感谢。

查询

SELECT user.postcode, postcode.postcode
FROM user
INNER JOIN postcode ON user.postcode LIKE CONCAT( postcode.postcode,  "%" ) 
WHERE user.postcode LIKE  "CM%"
LIMIT 0 , 30

结果

postcode    postcode
CM16 6BY    CM1
CM16 6BY    CM16
CM3 4XB CM3
CM9 6SW CM9
CM24 8JD    CM2
CM24 8JD    CM24
CM3 3EP CM3
CM1 3ES CM1
CM2 5AP CM2
CM22 6AZ    CM2
CM22 6AZ    CM22
CM17 9LH    CM1
CM17 9LH    CM17
CM2 7ER CM2
CM159ES CM1
CM159ES CM15
CM15 0NW    CM1
CM15 0NW    CM15
CM3 6XA CM3
CM14 4BT    CM1
CM14 4BT    CM14
CM9 4TB CM9
CM1 1HZ CM1
CM22 6DG    CM2
CM22 6DG    CM22
CM15 8QY    CM1
CM15 8QY    CM15
CM8 3HR CM8
CM1 1GS CM1
CM5 0BB CM5

3 个答案:

答案 0 :(得分:1)

试试这个

SELECT user.postcode, max(postcode.postcode) as postcode
FROM user
INNER JOIN postcode ON user.postcode LIKE CONCAT( postcode.postcode,  "%" ) 
WHERE user.postcode LIKE  "CM%"
GROUP BY user.postcode
LIMIT 0 , 30

答案 1 :(得分:1)

尝试匹配邮政编码的前半部分和空格,例如。 LIKE CONCAT(postcode, ' %')

或者这可能会帮助您重新格式化邮政编码:

SELECT
    CONCAT( substr(p, 1, length(p)-3), ' ', substr(p, -3) )
FROM (SELECT 'CM159ES' p) a;

答案 2 :(得分:0)

通过使用通配符“%”,它找到匹配的东西,就像通过文件名进行DOS搜索一样...... CM1与CM16,CM17,CM192,CM11189是相同的通配符。您的加入应该使用完全相同的邮政编码,并且只对您要限制的结果条件使用通配符...

SELECT 
      user.postcode, 
      postcode.postcode 
   FROM user 
      INNER JOIN postcode ON user.postcode = postcode.postcode
   WHERE 
      user.postcode LIKE  "CM%"
   LIMIT 0 , 30