2010-04-08 72 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