SQL 从两个表中选择数据(一行 -> 多行)
Posted
技术标签:
【中文标题】SQL 从两个表中选择数据(一行 -> 多行)【英文标题】:SQL Select data from two tables (one row -> multiple rows) 【发布时间】:2010-12-09 14:50:18 【问题描述】:假设我有两个 SQL 表:Customers 和 PhoneNumbers。
假设客户具有以下列:customerId(主键)、fName、lName。
假设 PhoneNumbers 具有以下列:phoneNumberId(主键)、phoneNumber、customerId(外键)。
目前我的理解是,如果每个客户都有一个电话号码,我可以用下面的 SQL 选择每个客户的 fName、lName 和 phoneNumber:
SELECT
customer.fName, customer.lName, phone.phoneNumber
FROM
Customers customer
INNER JOIN phoneNumbers phone ON
customer.customerId = phone.customerId
如果客户可能有多个电话号码怎么办?如何获取包含每个客户电话号码列表的客户列表?
我驱动 SQL 的编程语言是 C#/.NET。
【问题讨论】:
@casperOne,感谢您格式化我的代码 :-) logiclabz.com/sql-server/… 【参考方案1】:如您所说,如果每个客户只有一个电话号码,您的查询将有效。
具有多个电话号码的客户也将被退回,但客户记录将针对每个不同的电话号码重复。
您需要考虑的另一个条件是没有电话号码的客户。如果您对表进行 INNER JOIN,那么这些客户将被排除在结果集中。要包含此类客户,您需要使用 OUTER JOIN。
【讨论】:
【参考方案2】:您提供的查询将返回多个电话号码(如果存在)。您会看到带有 customer.fName
和 customer.lName
的行重复出现,每行带有不同的 phone.phoneNumber
。
【讨论】:
【参考方案3】:你可以做同样的事情。您当前列出的查询应该检索您想要的确切结果;每个客户每个电话号码一行。
【讨论】:
【参考方案4】:如果一位客户有多个号码,您将获得多行数据。
【讨论】:
以上是关于SQL 从两个表中选择数据(一行 -> 多行)的主要内容,如果未能解决你的问题,请参考以下文章
SQL INNER JOIN - 根据另一行的值从另一个表中选择数据