Как создать представление, объединяющее две или более таблиц в соответствии с требованиями? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть набор предоставленных мне таблиц и конкретное бизнес-требование, которое необходимо решить путем создания представления в SQL.У меня проблемы с пониманием объединений, прочее и т. Д. Я сделал попытку, но я думаю, что совершенно не прав и мне нужна помощь.

Таблицы следующие:

tblClients (
  ClientID, 
  ClientName, 
  ClientAddress, 
  ClientCity, 
  ClientProvince, 
  ClientPostalCode, 
  ClientPhone, 
  ClientEmail
)

tblVehicle (
  VehicleID, 
  VehicleMake, 
  VehicleModel, 
  VehicleYear, 
  ClientID
)

tblEmployees (
  EmployeeID, 
  EmployeeFirstName, 
  EmployeeLastName, 
  EmployeeAddress, 
  EmployeeCity, 
  EmployeeProvince, 
  EmployeePostalCode, 
  EmployeePhone, 
  EmployeeEmail
)

tblWorkOrders (
  OrderID, 
  VehicleID, 
  EmployeeID, 
  WorkDescription, 
  PartsCost, 
  LabourCost, 
  IssueDate, 
  CompletionDate
)

и Требование следующее:

Рассматривается веб-приложение, которое позволит клиентам с учетными записями - используя свой адрес электронной почты в качестве логина - просматривать историю счетов / рабочих заказов в гараже.Используя SQL, создайте представление, которое позволит клиенту видеть работу, проделанную на каждом из его автомобилей, включая описание работы, затраты и даты, но не то, какой сотрудник выполнил работу.FAR:

CREATE VIEW WORK_HISTORY AS
SELECT TBLWORKORDERS.WORKDESCRIPTION,                    
       TBLWORKORDERS.PARTSCOST, TBLWORKORDERS.LABOURCOST,                         
       TBLWORKORDERS.ISSUEDATE,TBLWORKORDERS.COMPLETIONDATE
       TBLVEHICLES.VEHICLEMAKE, TBLVEHICLES.VEHICLEMODEL, 
       TBLVEHICLES.VEHICLEYEAR
  FROM TBLWORKORDERS 
  INNER JOIN TBLVEHICLE
  ON TBLWORKORDERS.VEHICLEID = TBLVEHICLE.VEHICLEID

Не думаю, что это слишком сложно, но я новичок в SQL, поэтому вся ваша помощь и критика будут оценены.Если вам нужно что-то еще, пожалуйста, дайте мне знать, и я буду редактировать по мере необходимости.Спасибо!

ОБНОВЛЕНИЕ: Я думаю, что это внутреннее соединение.

1 Ответ

0 голосов
/ 05 апреля 2019

См. Ниже, как вы бы СОЕДИНЯЛИ свои столы вместе, чтобы связать свою клиентскую таблицу с рабочими заданиями, которые клиент хотел бы увидеть для своих автомобилей.

/* First Requirement: Filter aka WHERE Clause 
 | The requirement states the Client logs in using their email address.
*/
SELECT *
FROM tblClients c
WHERE c.ClientEmail = 'email@fakeEmail.com'
;

/* Let's expand on this now that we have found the Client by email
 | NEXT Requirement is to find the Invoice/Work Order.
 |   Ask yourself: How do I get from the Clients table to the Work Order Table?
 | I see that the Work Order Table does NOT contain a ClientID.
 |   I see however that it DOES contain a VehicleID and the Vechicle Table has a ClientID.
 | Perfect... I can now get from the Client table to the Work Order table using the Vehicle Table.
*/

SELECT c.ClientName, c.ClientEmail
  , v.VehicleModel
  , wo.WorkDescription, wo.PartsCost, wo.IssueDate, wo.CompletionDate
FROM tblClients c
  /* Tie Clients to their vehicle */
  JOIN tblVehicle v ON v.ClientID = c.ClientID
  /* Now Tie the Vehicle to the Work Orders */
  JOIN tblWorkOrders wo ON wo.VehicleID = v.VehicleID
WHERE /* Add email filter so we can see a specific client.  No filter means see ALL */
  c.ClientEmail = 'email@fakeEmail.com'
;

Что касается создания представления ... в этом случае вы НЕ включаете предложение WHERE, но вам НЕОБХОДИМО указывать адрес электронной почты, чтобы вы могли использовать его при вызове представления.

CREATE VIEW WORK_HISTORY AS
SELECT c.ClientName, c.ClientEmail
  , v.VehicleModel
  , wo.WorkDescription, wo.PartsCost, wo.IssueDate, wo.CompletionDate
FROM tblClients c
  /* Tie Clients to their vehicle */
  JOIN tblVehicle v ON v.ClientID = c.ClientID
  /* Now Tie the Vehicle to the Work Orders */
  JOIN tblWorkOrders wo ON wo.VehicleID = v.VehicleID
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...