#sql
#sql
Вопрос:
Допустим, у меня есть 3 таблицы:
Products
(Штрих-код [PK], PName, Цена, количество на складе)Saless
(SaleID[PK], DeliveryAddress, CreditCard)SaleItems
(SaleID [PFK], штрих-код [PFK], Количество)
а затем я создаю таблицу просмотра с именем allproductsales
:
create view allproductsales
as
select
s.saleid, p.barcode, p.pname
from
products p
left join
SALEITEMS si ON si.BARCODE = p.BARCODE
left join
saless s ON si.SALEID = s.SALEID;
и затем я решаю вставить новую строку в такие продукты, как
INSERT INTO PRODUCTS
VALUES (3545322, 'Carrot', 0.10, 34);
и когда я получаю display everything from allproductsales
, я вижу там только что вставленную строку без ее SaleID. Мой запрос для создания представления неверен или так и должно быть?
Спасибо.
Ответ №1:
представление — это не таблица, оно не содержит никаких данных, просто представление фактических таблиц. Вы можете думать об этом как о сохраненном запросе, который вы выполняете для получения результирующего набора при каждом запросе представления.
Имея это в виду, что произойдет при выполнении запроса, с помощью которого создается представление? поскольку вы используете соединение по левому краю, это, вероятно, означает, что вы не получаете ни одной соответствующей записи в таблице sales (или нет записи с правильным штрих-кодом в таблице salesItems), поэтому SalesID coloumn равен null
Комментарии:
1. о, точно.. Я понимаю, что представление не является таблицей, но я не знаю, полностью ли я понимаю его поведение с таблицами.