V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
luhuan97
V2EX  ›  数据库

SQL 数据库多表联查,不是很懂,帮帮忙

  •  
  •   luhuan97 · 2018-05-14 23:23:16 +08:00 · 2320 次点击
    这是一个创建于 2386 天前的主题,其中的信息可能已经有所发展或是发生改变。
    A 表
    id B_id1 B_id2 ...其他字段
    1 1 2

    B 表
    id name
    1 小明
    2 大明

    如何用 SQL 语句查询 A 表中的所有字段,还有 A 表记录对应 B 表的 name。
    数据可没学好,现在急用,各位帮帮忙
    26 条回复    2018-05-16 00:22:55 +08:00
    Eugene1024
        1
    Eugene1024  
       2018-05-14 23:39:02 +08:00
    建议 LZ 百度下连接查询,自己再操作两边,应该就可以搞定了
    wellsc
        2
    wellsc  
       2018-05-14 23:45:21 +08:00
    工作中其实很少用到 join
    alcarl
        3
    alcarl  
       2018-05-15 07:52:12 +08:00 via Android
    搞统计得经常用呀,做联机的用的少一些
    darrenxyli
        4
    darrenxyli  
       2018-05-15 08:11:53 +08:00
    "工作中其实很少用到 join"...
    CFO
        5
    CFO  
       2018-05-15 08:16:41 +08:00 via Android
    @wellsc 请教下用的多的是什么?
    hubahuba
        6
    hubahuba  
       2018-05-15 08:21:28 +08:00 via Android
    @CFO 其实还是用的挺多的,因为这涉及到表设计。那还是分人的,如果懒一些就直接,多建一些表就行了。但是你对自己要求高一些,那设计表的时候就要设计好,如何关联查询了。最终目的无非就是渠道数据而已,不必纠结。但是如果你去面试的时候,直接说,我就是一堆表直接查。那就比较尴尬了。
    hubahuba
        7
    hubahuba  
       2018-05-15 08:22:01 +08:00 via Android
    其实还是用的挺多的,因为这涉及到表设计。那还是分人的,如果懒一些就直接,多建一些表就行了。但是你对自己要求高一些,那设计表的时候就要设计好,如何关联查询了。最终目的无非就是渠道数据而已,不必纠结。但是如果你去面试的时候,直接说,我就是一堆表直接查。那就比较尴尬了。
    FrailLove
        8
    FrailLove  
       2018-05-15 08:22:09 +08:00
    SELECT b.name,a.* FROM a LEFT JOIN b ON a.id=b.id
    woscaizi
        9
    woscaizi  
       2018-05-15 08:23:13 +08:00 via iPhone
    a 表中 b_id 是横向扩展的吗?
    msg7086
        10
    msg7086  
       2018-05-15 08:33:18 +08:00
    @CFO 分开成两次查询效率可能会更高。
    ldw4033
        11
    ldw4033  
       2018-05-15 08:36:40 +08:00
    select a.*
    ,(select b.name from B b where b. id=a.B_id1) name1
    ,(select b.name from B b where b. id=a.B_id2) name2
    from A a

    楼主这里连接的是 2 个 B 表 ID 啊
    panpanpan
        12
    panpanpan  
       2018-05-15 08:56:31 +08:00
    @ldw4033 为什么不用关联查询,效率更高啊。
    select a.*,b1.name,b2.name from A a
    left join B b1 on a.B-id1 = b1.id
    left join B b2 on a.B-id2 = b2.id
    carakan
        13
    carakan  
       2018-05-15 09:00:37 +08:00
    "工作中其实很少用到 join"...

    因为 join 数据量大了效率不行?

    还是说...后期维护复杂?
    popil1987
        14
    popil1987  
       2018-05-15 09:06:21 +08:00
    vjnjc
        15
    vjnjc  
       2018-05-15 09:10:41 +08:00 via Android
    楼主是怕效率问题还是一点都不会,如果不会的话用 12 楼的方法就可以啦
    yufpga
        16
    yufpga  
       2018-05-15 09:11:04 +08:00
    @carakan 数据量上来了,涉及到分库分表,使用 join 查询就会很麻烦,扩展性不好。
    oppoic
        17
    oppoic  
       2018-05-15 10:39:42 +08:00
    @CFO “单表开发,运维扩容” 这个是主流的,单表的效率很高。
    大型项目,运维比开发做的工作多多了。
    carakan
        18
    carakan  
       2018-05-15 11:12:18 +08:00
    我一般都是这样

    left join B b1 on a.B-id1 = b1.id



    left join B b1 on a.B-id1 = b1.id
    left join B b2 on a.B-id2 = b2.id

    这样写的好处是???
    Alexhohom
        19
    Alexhohom  
       2018-05-15 11:22:17 +08:00
    两个 left join
    select a.*,b.name,c.name
    from a
    left join B b on b.id = a.B_id1
    left join B c on c.id = a.B_id2
    banks0913
        20
    banks0913  
       2018-05-15 11:29:26 +08:00
    @yufpga 那一般扩展性好的方案是啥样?
    huijiewei
        21
    huijiewei  
       2018-05-15 11:30:49 +08:00
    我们的目标,消灭 JOIN
    ob
        22
    ob  
       2018-05-15 12:06:30 +08:00 via Android
    @carakan 因为有两个名称。
    luhuan97
        23
    luhuan97  
    OP
       2018-05-15 23:07:44 +08:00
    @vjnjc 效率问题,因为数据表里面有上百万条数据。
    luhuan97
        24
    luhuan97  
    OP
       2018-05-15 23:08:23 +08:00
    第一次发帖,感觉找到了组织,仅仅一天就有二十几个回复。谢谢大家
    luhuan97
        25
    luhuan97  
    OP
       2018-05-15 23:09:29 +08:00
    @oppoic 兄弟可以解释一下这句话吗?“单表开发,运维扩容”
    vjnjc
        26
    vjnjc  
       2018-05-16 00:22:55 +08:00 via Android
    @luhuan97 我猜是不同表放在不同数据库里,没有外键。在程序里把他们都 join 起来~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1030 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:50 · PVG 02:50 · LAX 10:50 · JFK 13:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.