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

SQL 嵌套查询并连接显示,

  •  
  •   moana · 2020-01-31 23:36:05 +08:00 · 1157 次点击
    这是一个创建于 1760 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数据库多年前学过,全部忘完了,有个嵌套查询并连接显示的基础问题请教下大家.

    有两个数据库 A 和 B

    其中 A 数据库内容为

    name gender number
    李强 男 001 李刚 男 002 李德 男 003 李倩 女 004

    B 数据库内容为

    number class age 001 12 15 003 10 10 002 09 11 004 10 14

    我想通过查询 name 这个字段,进行嵌套及关联查询,显示如下结果

    name gender number class age 李强 男 001 12 15 李刚 男 002 09 11 李德 男 003 10 10 李倩 女 004 10 14


    语句要怎么写呢??

    我的数据库环境是 Postgresql.

    嵌套部分我会写,select * from B where number in ( select number from A where name = '李强')

    但是数据库是自己摸索的,整个联合显示部分这么写呢?

    zhuzhibin
        1
    zhuzhibin  
       2020-01-31 23:42:59 +08:00 via iPhone   ❤️ 1
    这不是普通的联表查询?是你想太复杂?还是我想简单了?
    moana
        2
    moana  
    OP
       2020-02-01 00:07:45 +08:00
    @zhuzhibin 你没想复杂 就是普通的联表查询 我就是个渣渣
    moana
        3
    moana  
    OP
       2020-02-01 00:20:20 +08:00
    A 表和 B 表有个共同字段 number.

    我需要从数据库 A 的字段 Name 开始查询,查询到 Name 对应的所有 number 后,再把 number 放到 B 表里面进行查询,最后把 A 的结果和 B 的结果全部汇总出来.

    理论自然查询就行.

    但是现在一个问题是 A 表的数据量非常非常非常大,所以我只在 Name 上面建了索引,B 表里面只在 number 上面建了索引.

    我想问下在这个前提下,这个语句怎么写会比较好
    Mac
        4
    Mac  
       2020-02-01 04:37:42 +08:00   ❤️ 1
    select
    name,
    gender,
    number,
    class,
    age
    from a
    left join b on a.number=b.number

    这是 mysql 的联表查询,Postgresql 你自己看文档,应该差不太多。
    rpxwa
        5
    rpxwa  
       2020-02-01 04:40:10 +08:00   ❤️ 1
    没看懂「你想得到的结果表」和「李刚」有什么关系。

    我猜?

    select * from B left join A on B.number=A.number
    moana
        6
    moana  
    OP
       2020-02-01 11:40:48 +08:00
    谢谢各位 是我自己想多了.

    问题解决了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1756 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:43 · PVG 00:43 · LAX 08:43 · JFK 11:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.