#php #sql #phpmyadmin
#php #sql #phpmyadmin
Вопрос:
Написал следующую базу данных, и меня попросили выполнить следующую задачу:
8. Перечислите результаты всех гонок, в которых участвовал данный участник, используйте имя участника и фамилию для указания участника. Результат должен включать имя участника, фамилию и класс, название серии и год, название гонки, дату и должность. Результаты должны быть упорядочены по их положению, в первую очередь по наилучшему положению. Если участник был зарегистрирован в гонке, но еще не участвовал, гонку не следует включать в список. Идентификаторы не должны отображаться.
DROP DATABASE IF EXISTS canary;
CREATE DATABASE canary;
USE canary;
CREATE TABLE member(
memberID INT AUTO_INCREMENT,
firstName VARCHAR(40),
lastName VARCHAR(40),
grade char, -- j, junior, s, senior
PRIMARY KEY(memberID)
);
CREATE TABLE series(
seriesID INT AUTO_INCREMENT,
seriesName VARCHAR(40),
seriesYear INTEGER,
PRIMARY KEY(seriesID)
);
CREATE TABLE race(
raceID INT AUTO_INCREMENT,
seriesID INT,
raceName VARCHAR(40),
raceDate DATE,
FOREIGN KEY series_key(seriesID) REFERENCES series(seriesID),
PRIMARY KEY(raceID),
);
CREATE TABLE competitor(
competitorID INT AUTO_INCREMENT,
memberID INT,
raceID INT,
position INT,
FOREIGN KEY race_key(raceID) REFERENCES race(raceID),
FOREIGN KEY member_key(memberID) REFERENCES member(memberID),
PRIMARY KEY(competitorID),
);
CREATE TABLE course(
courseID INT AUTO_INCREMENT,
courseName VARCHAR(50),
courseLevel INT,
PRIMARY KEY(courseID)
);
CREATE TABLE enrolment(
enrolmentID INT AUTO_INCREMENT,
memberID INT,
courseID INT,
FOREIGN KEY course_key(courseID) REFERENCES course(courseID),
FOREIGN KEY member_key(memeberID) REFERENCES memner(memberID)
PRIMARY KEY(enrolmentID)
);
INSERT INTO series VALUES(NULL, 'BritishSeries', 2020);
INSERT INTO series VALUES(NULL, 'EuropeanSeries', 2020);
INSERT INTO series VALUES(NULL, 'InternationalSeries', 2020);
INSERT INTO course VALUES(NULL, 'WhiteWaterRafting', 2);
INSERT INTO course VALUES(NULL, 'BasicTraining', 1);
INSERT INTO course VALUES(NULL, 'ProfessionalTraining', 3);
INSERT INTO race VALUES (NULL, 1, 'Qualifiers', '2018-04-12')
INSERT INTO race VALUES (NULL, 1, 'Regionals', '2019-05-16')
INSERT INTO race VALUES (NULL, 2, 'Nationals', '2019-07-19')
INSERT INTO race VALUES (NULL, 3, 'Internationals', '2019-09-21')
INSERT INTO member VALUES(NULL, 'Jimmy', 'Smith', senior);
INSERT INTO member VALUES(NULL, 'Macky', 'Gee', junior);
INSERT INTO member VALUES(NULL, 'Tempa', 'T', junior);
INSERT INTO member VALUES(NULL, 'Graeme', 'Maigai', senior);
INSERT INTO member VALUES(NULL, 'Willy', 'Nelson', junior);
SELECT * FROM member;
DELETE FROM race WHERE raceID='3';
INSERT INTO enrolmemnt VALUES(NULL, 1, 2);
-- Member 1
INSERT INTO competitor VALUES(NULL, 1, 2, 3);
INSERT INTO competitor VALUES(NULL, 1, 1, 1);
INSERT INTO competitor VALUES(NULL, 1, 4, 5);
-- Member 2
INSERT INTO competitor VALUES(NULL, 2, 2, 2);
INSERT INTO competitor VALUES(NULL, 2, 1, 3);
INSERT INTO competitor VALUES(NULL, 2, 4, 8);
-- Member 3
INSERT INTO competitor VALUES(NULL, 3, 2, 1);
INSERT INTO competitor VALUES(NULL, 3, 1, 4);
INSERT INTO competitor VALUES(NULL, 3, 4, 3);
-- Member 4
INSERT INTO competitor VALUES(NULL, 4, 2, 5);
INSERT INTO competitor VALUES(NULL, 4, 1, 2);
SELECT firstName, lastName, grade, seriesName, seriesYear, raceName, raceDate, position FROM member, series, race, competitor
WHERE competitor.memberID = member.memberID ORDER BY position;
Однако следующее возвращает просто 1 и 2 в качестве позиций, а не те, которые я ввел для каждого конкурента.
ВЫБЕРИТЕ ИМЯ, фамилию, класс, имя_серии, год_серии, имя гонки, дату гонки, позицию ИЗ участника, серии, расы, конкурента, ГДЕ конкурент.Идентификатор участника = member.Идентификатор участника ПОРЯДОК ПО позиции;
Пожалуйста, помогите мне
Комментарии:
1.
FROM member, series, race, competitor
картезианские соединения устарели примерно с 25 лет. вместо этого используйте правильныйJOIN
.2. Спасибо, убрал заглавные буквы! Странно, что наш лектор не рассказал нам о правильных соединениях, которые необходимо исследовать
3. @Cid Синтаксис (не декартовы соединения сами по себе) устарел в MS SQL Server, а это не так.