2011-08-01 42 views
1

我有一個問題,我只需要從我的初始表中獲取一些東西,然後從另一個表中加入另一個項目,然後再從另一個表中加入另一個項目。我認爲這很容易,但它遠非如此。這裏是我的SQL信息(爲了簡單起見,它保存爲一條記錄)。多表加入

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  | 
+-----------------+---------------+ 

我需要的是以下幾列:

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

我想我必須做三加入擺脫向客服表FrequencyType,因爲他們僅在該表中引用,而比客戶表。因此,我必須採取一個額外的步驟來獲取這些信息(customers <> customerservice <> frequency)。

回答

2

你是對的,你需要加入所有三個表來獲取信息,這已經足夠了:

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如何解析查詢,但肯定它會在解釋器選擇語句之前查找(以及SQL Server的工作方式)別名definiton,否則不起作用。我相信別人可以更好地解釋我 – 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