2010-12-09 60 views
2

假设我有两个SQL表:Customers和PhoneNumbers。SQL从两个表中选择数据(一行 - >多行)

假设客户具有以下列:customerId(主键),fName,lName。

假设PhoneNumbers具有以下列:phoneNumberId(主键),phoneNumber,customerId(外键)。

我到目前为止明白那是什么,如果每个客户都有一个电话号码,我可以用下面的SQL选择FNAME,LNAME,和每一个客户的电话号码:

SELECT 
    customer.fName, customer.lName, phone.phoneNumber 
FROM 
    Customers customer 
     INNER JOIN phoneNumbers phone ON 
      customer.customerId = phone.customerId 

如果一个客户可能有多个电话号码?如何获得每个客户电话号码列表的客户列表?

我用来驱动SQL的编程语言是C#/ .NET。

+0

@casperOne,感谢格式化我的代码:-) – 2010-12-09 14:54:01

回答

3

正如您所说,如果每个客户只有一个PhoneNumber,那么您的查询将会起作用。

具有多个电话号码的客户也将被退回,但客户记录将被复制到每个不同的电话号码。

您需要考虑的另一个条件是没有电话号码的客户。如果您INNER JOIN表格,则这些客户将被排除在结果集之外。要包含这些客户,您需要使用OUTER JOIN。

0

你可以做同样的事情。您当前列出的查询应检索您想要的确切结果;每个客户每个电话号码一行。

0

如果某个客户有多个号码,您将获得多行。

2

您提供的查询将返回多个电话号码(如果存在)。您将看到重复的行customer.fNamecustomer.lName,每行都有不同的phone.phoneNumber