2010-04-08 75 views
9

更新:SQL:如何使用表加入視圖?

我使用MySQL的語句來創建一個視圖:

我需要證明編者姓,名和,如果他們出貨量超過50本書籍的城市。我擁有的三張桌子是:

create table editors (
ed_id char(11), 
ed_lname varchar(20), 
    ed_fname varchar(20), 
    ed_pos varchar(12), 
    phone varchar(10), 
    address varchar(30), 
    city varchar(20), 
    state char(2), 
    zip char(5), 
    ed_boss char(11)); 

create table titleditors (
ed_id char(11), 
title_id char(6), 
ed_ord integer); 

create table salesdetails (
sonum integer, 
qty_ordered integer, 
qty_shipped integer, 
title_id char(6), 
date_shipped date); 

任何人都可以告訴我什麼代碼會創建此結果嗎? 我沒有製作表格,我只需要處理我提供的內容。

+0

您使用哪種RDBMS引擎? – Quassnoi 2010-04-08 14:24:03

回答

18

陳舊的語法(注意連接條件和過濾條件的混合):

CREATE VIEW qtyorderedview AS 
    SELECT 
    salesdetails.title_id, salesdetails.qty_shipped, 
    editors.ed_id, editors.ed_lname, editors.ed_fname, editors.city 
    FROM 
    titleditors, salesdetails, editors 
    WHERE 
    titleditors.title_id = salesdetails.title_id 
    AND editors.ed_id = titleditors.ed_id 
    AND salesdetails.qty_ordered > 50 

現代語法(連接條件和過濾條件是分開的):

CREATE VIEW qtyorderedview AS 
    SELECT 
    salesdetails.title_id, salesdetails.qty_shipped, 
    editors.ed_id, editors.ed_lname, editors.ed_fname, editors.city 
    FROM 
    titleditors 
    INNER JOIN salesdetails ON titleditors.title_id = salesdetails.title_id 
    INNER JOIN editors  ON editors.ed_id = titleditors.ed_id 
    WHERE 
    salesdetails.qty_ordered > 50 

加入反對意見的工作完全一樣加入反對錶。只需使用視圖名稱來代替常規表格名稱即可。

+0

我正在使用DB2數據庫。你提供的語法看起來應該完美,但我得到的錯誤。也許我的DB2數據庫不可靠。 – 2010-04-08 14:23:13

+0

編輯*謝謝。想知道你是如何檢查它的。 +1 – 2010-04-08 14:23:39

+0

@gamerzfuse:你得到的確切錯誤是什麼? – Tomalak 2010-04-08 14:26:58

5
SELECT e.* 
FROM (
     SELECT DISTINCT te.ed_id 
     FROM (
       SELECT title_id 
       FROM sales_details 
       GROUP BY 
         title_id 
       HAVING SUM(qty_shipped) > 50 
       ) t 
     JOIN titleditors te 
     ON  te.title_id = t.title_id 
     ) te 
JOIN editors e 
ON  e.ed_id = te.ed_id 
+0

我認爲你的分組方法比我的扁平連接好,但對我來說,這個問題還不夠清楚,無法確定。 – Tomalak 2010-04-08 14:29:25

+0

我認爲這是正確的解決方案。但是,我不確定準確的標準是什麼。每個編輯超過50本書或每本編輯超過50本書?但是,兩者都需要有句子。 – 2010-04-09 14:29:59