У меня проблема с группировкой для этого запроса - PullRequest
0 голосов
/ 17 июня 2019

У меня проблема с группировкой таблицы соединений 4.

В связи с новыми правительственными постановлениями каждый частный сервисный автомобиль должен периодически обслуживаться и проходить надлежащую подготовку, RideWiki должна представить правительству доказательства того, что каждыйу водителя есть необходимые документы, чтобы иметь право быть частным водителем.

Перечислите водителей, которые обслуживали свой автомобиль в течение последних двух месяцев (после 16/4/2019) и прошли базовую подготовку водителей..

Автосервис >> Водитель <<pre> select Dname from driver,carservice,dsession,training; where driver.dnric = carservice.dnric and driver.dnric = dsession.dnric and dsession.tid = training.tid where sysdate-servicedate < 60 group by dnric,tid,dname; CREATE TABLE DRIVER ( DNRIC CHAR(12) PRIMARY KEY, DGrade CHAR(1), DLicense NUMBER(8), DStart DATE, DIPlan CHAR(1), DName VARCHAR(20), DDOB DATE, DGENDER CHAR(1), DMOBILE NUMBER(11) ); CREATE TABLE CARSERVICE ( DCarID NUMBER(6) PRIMARY KEY, CarType VARCHAR(20), ServRem VARCHAR(250), DNRIC CHAR(12), CarServ CHAR(1), FOREIGN KEY (DNRIC) references DRIVER(DNRIC) ); CREATE TABLE DSESSION ( SID NUMBER(7) PRIMARY KEY, SDate DATE, DNRIC CHAR(12), TID NUMBER(6), FOREIGN KEY (DNRIC) references DRIVER(DNRIC), FOREIGN KEY (TID) references TRAINING(TID) ); CREATE TABLE TRAINING ( TID NUMBER(6) PRIMARY KEY, TrainingPrg VARCHAR(50), PrgSession VARCHAR2(10) );

Ответы [ 3 ]

0 голосов
/ 18 июня 2019

Вы указали неправильное имя столбца в servicedate, где вы указали sdate при создании таблицы.

SELECT DISTINCT Dname
FROM driver d
INNER JOIN carservice car ON d.dnric = car.dnric
INNER JOIN dsession dses ON d.dnric = dses.dnric 
INNER JOIN training train ON dses.tid = train.tid 
WHERE sysdate-dses.sdate < 60

Несколько полезных советов, которые следует иметь в виду:

  1. Использование псевдонимов таблиц d, car, dses, train по вашему выбору для доступа к данным.
  2. Используйте синтаксис ANSI (операторы JOIN) вместо альтернативного синтаксиса для лучшей читаемости кода.
  3. Не пропустите синтаксические ошибки, чтобы скрыть свой путь.

Кроме того, вы должны правильно указать переменную ограничения при использовании ORACLE / SQL Server / MS Access

 CONSTRAINT FK_DNRIC FOREIGN KEY (DNRIC) references DRIVER(DNRIC),

Надеюсь, это поможет.

0 голосов
/ 25 июня 2019

Большое спасибо, ребята!Мне очень помогли только запросы с INNER JOIN.

0 голосов
/ 17 июня 2019

У вас неверная точка с запятой в конце строки from.

Кроме того, вы не использовали функцию агрегирования, поэтому вы не должны использовать group by.

Используйте distinct, если вам не нужно повторять значения.

select distinct Dname
from driver
INNER JOIN carservice ON driver.dnric = carservice.dnric
INNER JOIN dsession ON driver.dnric = dsession.dnric 
INNER JOIN training ON dsession.tid = training.tid 
Where sysdate-servicedate < 60

Вы должны использовать синтаксис явного соединения и избегать старого (с 1992 года) синтаксиса неявного соединения, основанного на предложении where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...