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

Кто-либо может сказать мне, какой код должен был бы создать этот результат? Я не сделал таблицы, я просто должен работать с тем, что мне дали.

10
задан Danny Beckett 6 May 2013 в 13:11
поделиться

2 ответа

Устаревший синтаксис (обратите внимание на смешение условий соединения и условий фильтрации):

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

Соединения против представлений работают точно так же, как соединения против таблиц. Просто используйте имя представления вместо обычного имени таблицы.

18
ответ дан 3 December 2019 в 17:20
поделиться
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
5
ответ дан 3 December 2019 в 17:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: