2011-08-01 2 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 из таблицы CustomerService как они обозначены только в этой таблице, а чем таблица клиентов. Поэтому я должен сделать еще один шаг, чтобы получить эту информацию (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 работает таким образом), как и раньше, перед выражением выбора интерпретатора, иначе это не сработает. Я уверен, что кто-то еще может объяснить, что намного лучше, чем мне – 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 
Смежные вопросы