最近一直在SQL Server 转MySQL 或TiDB,遇到的场景如下
假设有个订单模块,订单主表A 转 MySQL、订单明细表B 转 TiDB,好多人都说同一模块的应该转到同一库中,这个我也明白,这里就不在议论这个话题,我这是举例说明。
问题来了
1. A表 Join B表,on A.OrderId=B.OrderId where 后边可能有A、B两个表的条件
由于两个表在不同的库没有办法Join,只能单独查询,程序里做关联,问题是 如何实现where后边不同表的条件。
1)先查询订单表A select * from a where xxx; 得到订单表的结果集。
2)当需要订单明细的时候,再查询订单明细表B, select * from b where orderid={xx} and yyy;
select A.x1,A.x2,B.y1,B.y2...... from b where orderid={xx} and yyy
查询字段有A表和B表
如果A表有条件的时候,用你那种还可以,如果A表没有条件的时候,要先查B表,根据B表中的OrderId,再去反查A表
那岂不是还要根据条件来判断,先查A表,还是后查B表,岂不是有点恶心啊?
可以关联的 SELECT * FROM 库名.表名 join xxx .....
2个不同的库怎么用外链,即使同一种库,也不建议使用外链去关联查询啊
@莫思念1314: 两个不同的库 a,b a下有c表 b库下有d表 ,现在要关联 c d两表
你现在的问题是:由于两个表在不同的库没有办法Join!!!!!!
答:我告诉你是可以的 库名点表名
说的够明白了吧
SELECT * FROM a.c AS cc INNER JOIN b.d AS dd ON cc.id=dd.id
@DanBrown: 我明白你的意思,之前不同系统之间都是数据库直连的。现在问题是,一个mysql,一个tidb两种不同的库。而且禁止外链
@莫思念1314:
虽然不知道为什么个人吐槽一下,为啥数据不放在一个种数据库中;
没遇见这种情况,不过我想你应该找个中间件来过渡,把数据都放在一个地方然后再去操作