2011-08-01 35 views
1

私は最初のテーブルからいくつかのものを取得し、別のテーブルの別のアイテムを結合し、別のテーブルのアイテムをもう1つ結合する必要があるという問題があります。私はこれが簡単だろうと思ったが、それはそれから遠い。ここに私のSQL情報があります(簡単にするために1レコードにしました)。むしろ、私は彼らがそのテーブルのみに参照されるように、私はトリプルでたCustomerServiceテーブルからFrequencyTypeを取得するために参加しなければならないだろう考え出し複数のテーブルの結合

customers.CustomerID, customers.CustomerActive, customers.protected, frequency.FrequencyType 

select * from customers limit 1 \G; 
*************************** 1. row *************************** 
      CustomerID: 9 
     CustomerMapsco: 459 
     CustomerActive: 1 
    CustomerFirstName: John 
    CustomerLastName: Doe 
CustomerServiceStreet: 1314 Road Rd. 
    CustomerServiceCity: City 
CustomerServiceState: TX 
    CustomerServiceZip: 12345 
CustomerBillingStreet: 1314 Road Rd. 
    CustomerBillingCity: City 
CustomerBillingState: TX 
    CustomerBillingZip: 12345 
    CustomerHomePhone: 1231231234 
    CustomerCellPhone: 1231231234 
    CustomerWorkPhone: 1231231234 
     CustomerWorkExt: 12345 
      CustomerFax: 1231231324 
     CustomerEmail: [email protected] 
      CustomerDog: 0 
       CrewID: 1 
      ScheduleID: 1 
      protected: 1 


mysql> select * from customerservice limit 1 \G; 
*************************** 1. row *************************** 
     CustomerSvcID: 15 
      CustomerID: 9 
     ServiceTypeID: 1 
    FrequencyTypeID: 1 
       DayID: 5 
    CustomerSvcCost: 21 
CustomerSvcBeginDate: 2007-01-01 00:00:00 
    CustomerSvcEndDate: NULL 
1 row in set (0.00 sec) 

mysql> select * from frequency 
    -> ; 
+-----------------+---------------+ 
| FrequencyTypeID | FrequencyType | 
+-----------------+---------------+ 
|    1 | Weekly  | 
|    2 | Biweekly  | 
|    3 | One Time  | 
+-----------------+---------------+ 

何が必要なのは、次の列であります顧客テーブルよりもしたがって、私はその情報を得るために1つの追加ステップを取らなければならない(customers <> customerservice <> frequency)。

答えて

2

あなたは正しいです、あなたはその情報を取得するためにすべての3つのテーブルを結合する必要があり、これは十分なはずです:

SELECT c.CustomerID, c.CustomerActive, c.protected, f.FrequencyType 
FROM customers c 
    JOIN customerservice s 
     ON c.CustomerID = s.CustomerID 
    JOIN frequency f 
     ON s.FrequencyTypeID = f.FrequencyTypeID 
+0

それを解決している素晴らしいです。将来の参照のためにこれを説明できる方法はありますか?私は、 'FROM tablename'の後の文字がエイリアス(' AS'?)であると推測しています。私が理解できないことは、それらが 'SELECT'部分ですでに定義されているようにそれらを参照することです。だから、私は、あなたがそれらを定義する前に別名を参照できるようにMySQLを(おそらく他の人たちも)推測しています、そして、あなたがそれらを定義する限り、それはすべて良いですか? MySQLの基本的な質問です。繰り返しますが、あなたのソリューションは素晴らしいものでした。 – drewrockshard

+0

はい、テーブルtまたはテーブルtはちょうど同じです。実際に私はmysqlがどのようにクエリを解析するのかわからないが、そうでなければ動作しないインタープリターselectステートメントの前に別名definitonを探す(そしてSQL Serverはそのようにも動作する)。他の誰かがそれをもっとうまく説明できると確信しています – Dalen

1
SELECT c.CustomerID, c.CustomerActive, c.protected, f.FrequencyType 
    FROM customers c 
     LEFT JOIN customerservice cs 
      INNER JOIN frequency f 
       ON cs.FrequencyTypeID = f.FrequencyTypeID 
      ON c.CustomerID = cs.CustomerID 
関連する問題