luhuan97
V2EX  ›  数据库

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

  •  
  •   luhuan97 · May 14, 2018 · 2897 views
    This topic created in 2944 days ago, the information mentioned may be changed or developed.
    A 表
    id B_id1 B_id2 ...其他字段
    1 1 2

    B 表
    id name
    1 小明
    2 大明

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

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

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

    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  
       May 15, 2018
    两个 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  
       May 15, 2018
    @yufpga 那一般扩展性好的方案是啥样?
    huijiewei
        21
    huijiewei  
       May 15, 2018
    我们的目标,消灭 JOIN
    ob
        22
    ob  
       May 15, 2018 via Android
    @carakan 因为有两个名称。
    luhuan97
        23
    luhuan97  
    OP
       May 15, 2018
    @vjnjc 效率问题,因为数据表里面有上百万条数据。
    luhuan97
        24
    luhuan97  
    OP
       May 15, 2018
    第一次发帖,感觉找到了组织,仅仅一天就有二十几个回复。谢谢大家
    luhuan97
        25
    luhuan97  
    OP
       May 15, 2018
    @oppoic 兄弟可以解释一下这句话吗?“单表开发,运维扩容”
    vjnjc
        26
    vjnjc  
       May 16, 2018 via Android
    @luhuan97 我猜是不同表放在不同数据库里,没有外键。在程序里把他们都 join 起来~
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   961 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 19:10 · PVG 03:10 · LAX 12:10 · JFK 15:10
    ♥ Do have faith in what you're doing.