我的用户在5个数据库的用户表中被分割。看起来像这样:
db1.user
id token app lang last_update
XX 1 a en 11:00
XX 2 a en 12:00
db2.user
id token app lang last_update
XX 1 b en 12:00
XX 2 a en 16:00
db3.user
…
现在我需要一个视图中的所有用户,它应该看起来像这样(令牌和应用程序是主键):
view db.user_all
id token app lang last_update
XX 1 a en 11:00
XX 1 b en 12:00
XX 2 a en 16:00
我试图结合一切:
create view `db`.`user_all` AS
SELECT * FROM `db1`.`user` union
SELECT * FROM `db2`.`user`
结果如下:
view db.user_all
id token app lang last_update
XX 1 a en 11:00
XX 2 a en 12:00
XX 1 b en 12:00
XX 2 a en 16:00
我的sql语句删除了重复的行,但如果last_update不同,我在结果视图中有一个重复的用户。怎么解决这个?我需要所有数据,也是最新的last_update。
答案 0 :(得分:0)
尝试使用DISTINCT和MAX,如下所示:
SELECT DISTINCT id, token, app, lang, max(last_update) FROM (
SELECT * FROM `db1`.`user` union
SELECT * FROM `db2`.`user`
)
GROUP BY id, token, app, lang
您可能需要在最后一个括号后使用别名。
更新
显然,MYSQL不能在视图中包含子查询,因此您必须将其创建为存储过程而不是http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html
答案 1 :(得分:0)
试试这个:
CREATE VIEW user_intermediate AS
SELECT * FROM db1 UNION ALL SELECT * FROM db2
ORDER BY last_update DESC
;
CREATE VIEW user_all AS
SELECT *
FROM user_intermediate
GROUP BY app, token
;
假设App和Token使用户密钥,user_all视图应该让不同的用户在两个表中都有最新的last_update。