Несколько таблиц в одном представлении? - PullRequest
3 голосов
/ 18 мая 2011

Сегодня мой вопрос: как мне создать представление в базе данных MySQL, которая использует более двух таблиц?

Вот мой запрос (он работает). Я не собираюсь менять текущий запрос, в основном я ищу хорошую ссылку с примерами по этой теме.

CREATE OR REPLACE VIEW vw_itemsPurchased AS
SELECT `tbl_buyers`.`fldPrimaryKey` as fldFKeyBuyer, `tbl_buyers`.`fldEmail` as fldBuyerEmail, `tbl_buyers`.`fldAddressStreet`, `tbl_buyers`.`fldAddressCity`, `tbl_buyers`.`fldAddressState`, `tbl_buyers`.`fldAddressZip`, `tbl_buyers`.`fldAddressCountry`, `fldPaymentCurrency`, `fldPaymentGross`, `fldPaymentStatus`, `fldReceiverEmail`, `fldTransactionId`
FROM `tbl_transactions` INNER JOIN `tbl_buyers`
ON `tbl_transactions`.`fldFKeyBuyer` = `tbl_buyers`.`fldPrimaryKey`

Спасибо за ваше время!

1 Ответ

6 голосов
/ 18 мая 2011

Чтобы использовать более двух таблиц, вы просто продолжаете добавлять операторы JOIN для подключения внешних ключей. Адаптация вашего кода для добавления воображаемой третьей таблицы tbl_products может выглядеть так:

CREATE OR REPLACE VIEW vw_itemsPurchased AS (
  SELECT 
   tbl_buyers.fldPrimaryKey as fldFKeyBuyer, 
   tbl_buyers.fldEmail as fldBuyerEmail, 
   tbl_buyers.fldAddressStreet, 
   tbl_buyers.fldAddressCity, 
   tbl_buyers.fldAddressState, 
   tbl_buyers.fldAddressZip, 
   tbl_buyers.fldAddressCountry, 
   fldPaymentCurrency, fldPaymentGross, 
   fldPaymentStatus, 
   fldReceiverEmail,
   fldTransactionId,
   tbl_tproducts.prodid
 FROM 
   tbl_transactions 
    INNER JOIN tbl_buyers ON tbl_transactions.fldFKeyBuyer = tbl_buyers.fldP
    -- Just add more JOINs like the first one..
    JOIN tbl_products ON tbl_products.prodid = tbl_transactions.prodid

В вышеупомянутом методе первая и вторая таблицы связаны, а первая и третья таблицы связаны. Если вам нужно связать table1->table2 и table2->table3, перечислите несколько таблиц в FROM и свяжите их в WHERE. Ниже приведен только для иллюстрации и не имеет особого смысла, так как вы, вероятно, не будете иметь идентификатор клиента в той же таблице, что и цена продукта.

SELECT
  t1.productid,
  t2.price,
  t3.custid
FROM t1, t2, t3
WHERE 
  -- Relationships are defined here...
  t1.productid = t2.productid 
  AND t2.custid = t3.custid
...