我在邮政编码上加入了两张桌子。我只有上半年的数据。问题是我的用户表中有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
答案 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