2010-04-08 20 views
9

AKTUALIZACJA:SQL: Jak dołączyć do widoku za pomocą tabeli?

używam oświadczenie MySQL utworzyć widok:

trzeba pokazać Redakcja imię, nazwisko i miasto, jeśli wysyłają ponad 50 książek. Trzy tabele, które posiadam to:

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); 

Czy ktoś może mi powiedzieć, jaki kod byłby potrzebny do stworzenia tego wyniku? Nie zrobiłem stołów, po prostu muszę pracować z tym, co mi dano.

+0

Z jakiego silnika RDBMS korzystasz? – Quassnoi

Odpowiedz

18

składnia przestarzały (uwaga wymieszania dołączyć warunki i warunki Filter):

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 

Nowoczesne składni (join warunki i warunki filtrów są oddzielne):

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 

przyłącza przed widokiem działa dokładnie tak samo jak dołącza do tabel. Po prostu użyj nazwy widoku zamiast zwykłej nazwy tabeli.

+0

Używam bazy danych DB2. Składnia, którą podasz, wygląda na to, że powinna działać idealnie, ale dostaję błędy. Może moja baza danych DB2 jest nieporęczna. –

+0

EDYCJA * Dzięki. zastanawiałeś się, jak to sprawdziłeś. +1 –

+0

@gamerzfuse: Jaki jest dokładny błąd? – Tomalak

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

Myślę, że twoje podejście grupowe jest lepsze niż moje mieszkanie, ale dla mnie pytanie nie jest wystarczająco jasne, aby wiedzieć na pewno. – Tomalak

+0

Myślę, że to jest właściwe rozwiązanie. Jednak nie jestem pewien, jakie dokładnie są kryteria. Czy jest to ponad 50 książek na tytuł lub ponad 50 książek na jednego redaktora? Oba wymagają jednak klauzuli posiadania. –

Powiązane problemy