假设有 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 帐户,我可以使用联接来实现类似的功能吗?
谢谢