2011-05-17 17 views
3

今日私の質問は、2つ以上のテーブルを使用するMySQLデータベースでビューを作成する方法ですか?1つのビューに複数のテーブルがありますか?

私の現在のクエリを変更するつもりはありませんが、このトピックの例を参照してください。

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` 

ありがとうございました!

+0

もっと多くのテーブルを結合するだけです。他のテーブルには最初の2つのテーブルとの関係はありませんか?私は何が欠けていますか?また、MySQLクエリのすべてのテーブルとフィールド名の前後にバッククォートを置く必要はありません。彼らは単にキーワードをエスケープします。 –

+0

参加し続けることはできませんでしたか?私は何が間違っているのか分からない。エラーはありますか? –

答えて

6

2つ以上のテーブルを使用するには、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 

を、第一及び第二のテーブルが関係し、第1及び第3のテーブルが関連しています。 table1->table2table2->table3を関連付ける必要がある場合は、FROMに複数のテーブルをリストアップし、それらをWHEREに関連付ける必要があります。以下は説明のためのものであり、あまり意味をなさない。おそらく製品価格と同じテーブルに顧客IDを持たないからだ。

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

今私はコメントではなく答えとしてそれを投稿したいと思います。少なくともバックテックをそこから取る。 ; P –

+0

ありがとう、マイケル! – kstev

+0

また、私はtbl_products;という名前のテーブルを持っていました;) – kstev

関連する問題