MySQL跨库多表联查(不同库之间进行表关联)
MySQL跨库联查(不同库之间进行表关联)
mysql支持多个库中不同表的关联查询,你可以随便链接一个数据库
然后,sql语句为:
select * from db1.table1 left join db2.table2 on db1.table1.id = db2.table2.id
只要用数据库名加上"."就能调用相应数据库的数据表了.
数据库名.表名
自己遇到的一个跨库聚合求差集的场景
SELECT COUNT(1) FROM analytics_graph_data.HORGShareHoldV002 WHERE hcode NOT LIKE -% AND CHAR_LENGTH(`name`) > 3 AND hcode NOT IN(SELECT HCODE FROM master_dev.TCR0002_2_LIST_H WHERE HCODE IS NOT NULL)
注意:多表联查时可能遇到的问题,关联的两个字段的字段排序规则不同会发生以下报错
Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation =
这种情况只需要将字段的排序规则修改一致即可:
修改表字段排序规则
ALTER TABLE `表名` MODIFY COLUMN `字段名(列名)` VARCHAR(64) COLLATE `排序规则`;
ALTER TABLE master_dev.TCR0002_2_LIST_H MODIFY COLUMN ITCODE2 VARCHAR(64) COLLATE utf8mb4_0900_ai_ci;
若场景是需要跨节点或者异构场景:
如:两个MySQL服务,或者MySQL与ES
则建议在程序中去分次处理。