V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nikoo
V2EX  ›  问与答

SQL 请教:两张同样的表, ID 唯一,如何 select?

  •  
  •   nikoo · 2020-05-26 07:17:18 +08:00 · 1958 次点击
    这是一个创建于 1647 天前的主题,其中的信息可能已经有所发展或是发生改变。
    两张表结构相同,id 全局唯一,随机分散在两个表中,目前只知道 id,能否一句 select 获得结果?

    tableA:
    id,value
    1,...
    3,...
    4,...

    tableB:
    id,value
    2,...
    5,...
    6,...

    目前仅给出 id:5,如何实现 select 语句?
    第 1 条附言  ·  2020-05-26 12:27:47 +08:00
    并不知道随机分布规则,所以无法用例如 5%2=1 之类提前获知 id 处于哪张表
    10 条回复    2020-05-26 12:34:02 +08:00
    Chihaya0824
        1
    Chihaya0824  
       2020-05-26 07:20:52 +08:00
    a342191555
        2
    a342191555  
       2020-05-26 07:21:08 +08:00 via iPhone   ❤️ 1
    select * from a where a.id =5 union select *from b where b.id = 5
    chinvo
        3
    chinvo  
       2020-05-26 07:26:15 +08:00 via iPhone
    根据 id 特征分表可以减少查询时的损耗
    wushigejiajia01
        4
    wushigejiajia01  
       2020-05-26 07:58:29 +08:00 via Android
    不知道分片规则是没法准确有效查的吧?

    用 union 肯定不是最优解
    wushigejiajia01
        5
    wushigejiajia01  
       2020-05-26 08:03:14 +08:00 via Android
    1. 5%2=1

    2. select tableB
    YUyu101
        6
    YUyu101  
       2020-05-26 08:06:58 +08:00 via Android
    随机分散可还行,那只能 union 吧,这样分表也不能减少压力啊,除非你查出来后保存 id 是那张表,以后不要再查两遍了。
    shakoon
        7
    shakoon  
       2020-05-26 08:36:30 +08:00
    已经确认全局唯一了那用 union all 。union 会做去重,效率远低于 union all
    nikoo
        8
    nikoo  
    OP
       2020-05-26 12:30:28 +08:00
    并不知道随机分布规则,所以无法用例如 5%2=1 之类提前获知 id 处于哪张表

    @a342191555 谢谢,这样写需要将匹配的 id 值写两遍,感觉似乎不太优雅?


    如果不能提算出 id 处于哪张表,是否用 union /union all 是唯一的方案了?
    daozhihun
        9
    daozhihun  
       2020-05-26 12:32:50 +08:00
    话说,为什么会有随机分配在两张表这种设计。。
    msg7086
        10
    msg7086  
       2020-05-26 12:34:02 +08:00   ❤️ 1
    不能预测处于哪张表,那必定要同时查两张表拿数据,那不就是 union 么。
    查两张表,你觉得值写两遍不雅,可以先放在变量里啊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2727 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:45 · PVG 23:45 · LAX 07:45 · JFK 10:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.