首页 新闻 赞助 找找看

SQL多表关联如何解耦

0
[待解决问题]

最近一直在SQL Server 转MySQL 或TiDB,遇到的场景如下

假设有个订单模块,订单主表A 转 MySQL、订单明细表B 转 TiDB,好多人都说同一模块的应该转到同一库中,这个我也明白,这里就不在议论这个话题,我这是举例说明。

问题来了

1. A表 Join B表,on A.OrderId=B.OrderId  where 后边可能有A、B两个表的条件

由于两个表在不同的库没有办法Join,只能单独查询,程序里做关联,问题是 如何实现where后边不同表的条件。

向乾的主页 向乾 | 菜鸟二级 | 园豆:229
提问于:2018-07-25 11:57
< >
分享
所有回答(2)
0

1)先查询订单表A select * from a where xxx; 得到订单表的结果集。

2)当需要订单明细的时候,再查询订单明细表B, select * from b where orderid={xx} and yyy;

大豆男生 | 园豆:608 (小虾三级) | 2018-07-25 12:47

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表,岂不是有点恶心啊?

支持(0) 反对(0) 向乾 | 园豆:229 (菜鸟二级) | 2018-07-25 13:51
0

可以关联的 SELECT * FROM 库名.表名 join xxx .....

DanBrown | 园豆:1321 (小虾三级) | 2018-07-25 13:38

2个不同的库怎么用外链,即使同一种库,也不建议使用外链去关联查询啊

支持(0) 反对(0) 向乾 | 园豆:229 (菜鸟二级) | 2018-07-25 13:59

@莫思念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
支持(0) 反对(0) DanBrown | 园豆:1321 (小虾三级) | 2018-07-25 14:02

@DanBrown: 我明白你的意思,之前不同系统之间都是数据库直连的。现在问题是,一个mysql,一个tidb两种不同的库。而且禁止外链

支持(0) 反对(0) 向乾 | 园豆:229 (菜鸟二级) | 2018-07-25 14:09

@莫思念1314: 

虽然不知道为什么个人吐槽一下,为啥数据不放在一个种数据库中;

没遇见这种情况,不过我想你应该找个中间件来过渡,把数据都放在一个地方然后再去操作

支持(0) 反对(0) DanBrown | 园豆:1321 (小虾三级) | 2018-07-25 14:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册