【问题标题】:MySQL UPDATE - MAX() GROUP BYMySQL 更新 - MAX() 分组依据
【发布时间】:2010-08-16 13:43:18
【问题描述】:

我该如何改变:

SELECT user.postcode, max(postcode.postcode) as postcode
FROM user
INNER JOIN postcode ON user.postcode LIKE CONCAT( postcode.postcode,  "%" )
GROUP BY user.postcode

进入类似于?的UPDATE?

UPDATE user 
INNER JOIN postcode ON user.postcode LIKE CONCAT(postcode.postcode, "%") 
SET user.lat = postcode.lat, user.lng = postcode.lng

我不知道如何考虑 MAX() 和 GROUP BY

回答

下面是我的@ceteras 代码版本。效果很好!

DROP TABLE IF EXISTS tmp;
CREATE TABLE tmp AS
SELECT user.user_id, max(postcode.postcode) AS postcode, postcode.lat, postcode.lng
FROM user
INNER JOIN postcode ON user.postcode LIKE CONCAT( postcode.postcode,  "%" )
GROUP BY user.postcode;
ALTER TABLE tmp ADD PRIMARY KEY(user_id);

UPDATE user 
INNER JOIN tmp ON user.user_id = tmp.user_id
SET user.lat1 = tmp.lat, user.lng1 = tmp.lng;

DROP TABLE tmp;

【问题讨论】:

  • 你为什么使用LIKE CONCAT(postcode.postcode, "%")

标签: sql mysql group-by


【解决方案1】:

这是一份一次性工作吗? 如果是,试试这个:

drop table if exists tmp;
create table tmp as 
SELECT user.postcode, max(postcode.postcode) as post_code
FROM user
INNER JOIN postcode ON user.postcode LIKE CONCAT( postcode.postcode,  "%" )
GROUP BY user.postcode;
alter table tmp add unique key(postcode, post_code), add key (post_code, postcode);

UPDATE user 
INNER JOIN tmp ON user.postcode = tmp.postcode
inner join postcode p on p.postcode = tmp.post_code
SET user.lat = p.lat, user.lng = p.lng;

drop table tmp;

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 2022-12-13
    • 2011-02-20
    • 2011-03-02
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多