2010-12-09 9 views
2

Angenommen, ich habe zwei SQL-Tabellen: Kunden und PhoneNumbers.SQL Wählen Sie Daten aus zwei Tabellen (eine Zeile -> mehrere Zeilen)

Angenommen, Kunden haben die folgenden Spalten: customerId (Primärschlüssel), fName, lName.

Angenommen, PhoneNumbers hat die folgenden Spalten: phoneNumberId (Primärschlüssel), phoneNumber, customerId (Fremdschlüssel).

Was ich bisher zu verstehen ist, dass, wenn jeder Kunde eine Telefonnummer hat, kann ich die fName, lName wählen, und Telefonnummer anzeigen jeden Kunden mit der folgenden SQL:

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

Was passiert, wenn ein Kunde haben kann mehr als eine Telefonnummer? Wie bekomme ich eine Liste von Kunden mit der Liste der Telefonnummern jedes Kunden?

Meine Programmiersprache, um das SQL zu fahren, ist C# /. NET.

+0

@casperOne, danke für die Formatierung meines Codes :-) –

+0

http://www.logiclabz.com/sql-server/changes-row-to-columns-transpose-in-sql-server-2005-using-coalesce .aspx –

Antwort

3

Wie Sie sagen, wenn es genau eine PhoneNumber pro Kunde gibt, wird Ihre Abfrage funktionieren.

Kunden mit mehr als einer Telefonnummer werden ebenfalls zurückgegeben, der Kundendatensatz wird jedoch für jede andere Telefonnummer dupliziert.

Die andere Bedingung, die Sie berücksichtigen müssen, ist Kunden ohne Telefonnummern. Wenn Sie INNER die Tabellen verbinden, werden diese Kunden von der Ergebnismenge ausgeschlossen. Um solche Kunden einzubeziehen, müssen Sie einen OUTER JOIN verwenden.

0

Sie können genau dasselbe tun. Die Abfrage, die Sie gerade auflisten, sollte die genauen Ergebnisse abrufen, die Sie möchten; eine Zeile pro Telefonnummer pro Kunde.

0

Sie erhalten mehrere Zeilen für einen Kunden, wenn sie mehrere Nummern haben.

2

Die von Ihnen angegebene Abfrage gibt mehrere Telefonnummern zurück, wenn sie vorhanden sind. Sie sehen Zeilen mit customer.fName und customer.lName wiederholt, jeweils mit einem anderen phone.phoneNumber.

Verwandte Themen