【问题标题】:Getting data from 2 or more tables: select or join?从 2 个或更多表中获取数据:选择还是加入?
【发布时间】:2014-03-03 01:17:06
【问题描述】:

假设有 2 个或更多表。

表 A:身份证、姓名、生日

表 B:bID、petType、petName

表 C:cID、stackOverFlowUsername

我想获得类似身份证件、姓名、生日、一个人拥有的猫的数量、堆栈溢出的用户名

我们可以

  • 使用连接来连接所有 3 个表 select * from tableA... tableB... tableC...
  • 使用多个选择语句,select a.*, (select count(*) from tableB where petType = 'cat') as numberOfCats, (select...) as stackUsername from tableA a
  • 或其他我不知道的方式

我的问题是什么时候使用 select、joins 或有更好的方法?

更新:

这是另一个问题。如果我有 3 个 stackoverflow 帐户,Tom 有 1 个,Peter 有 2 个, 使用

A left join B left join C

将返回总共 6 行

select a.*, select count(*) from tableB where..., select top 1 stackOverFlowUsername from tableC

返回 3 行,因为有 3 个人

如果我只想为 tableA 中的每个人提供一行数据,而不管他/她有多少个 stackoverflow 帐户,我可以使用联接来实现类似的功能吗?

谢谢

【问题讨论】:

    标签: sql select join multiple-select-query


    【解决方案1】:

    可能会针对每个结果行扫描选定的子选择(案例 2),而连接的表/视图/子选择仅计算一次:节省内存和连接时间(使用预建索引)。一旦习惯了讲 SQL,就会发现 JOIN 语法容易阅读很多倍。

    【讨论】:

    • 嗨,我可以说如果我做这样的事情与连接相比会浪费更多的内存吗? select a.*, select col1 from tableC where..., select col2 from tableC where..., select col3 from tableC where...
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多