Проверьте, имеет ли атрибут в таблице заданное значение c значение SQL - PullRequest
0 голосов
/ 08 марта 2020

У меня есть эти таблицы. В «Обзоре» я хочу быть уверенным, что поле «Пользователь» имеет то же значение поля Reservation.User (Пользователь, который сделал Резервирование), где Резервирование имеет идентификатор, указанный в поле Review.Id_Reservation. Как я мог это сделать?

CREATE TABLE Reservation
(
Reservation_Number SERIAL UNIQUE /*NOT NULL*/ PRIMARY KEY,
User VARCHAR(64) DEFAULT 'Member', FOREIGN KEY(User) REFERENCES User(Email)
ON UPDATE CASCADE
ON DELETE SET DEFAULT,
Place INT, FOREIGN KEY(Place) REFERENCES Place(Id_Place)
ON UPDATE CASCADE
ON DELETE NO ACTION,
);

CREATE TABLE Review
(
Id_Review SERIAL UNIQUE PRIMARY KEY,
Id_Reservation INT NOT NULL, FOREIGN KEY(Id_Prenotazione) REFERENCES Reservation(Reservation_Number),
User VARCHAR(64) NOT NULL DEFAULT 'Member', FOREIGN KEY(User) REFERENCES Reservation(User)
/*How can I check that this user is the same who made the reservation and not another one? */
Description TEXT,
Stars INT DEFAULT 0
Type BOOLEAN DEFAULT TRUE
Answer VARCHAR(64),
Private BOOLEAN DEFAULT FALSE
CHECK(Stars > 0 AND Stars <= 5)
);

1 Ответ

1 голос
/ 08 марта 2020

Вам необходимо использовать ссылочную целостность между этими таблицами, которые вы уже создали, используя Id_Reservation INT NOT NULL, FOREIGN KEY(Id_Prenotazione) REFERENCES Reservation(Reservation_Number) Когда вы хотите получить User просто запросить Reservation таблицу вместо Review

Select
a.User
from
reservation a
join
review b
on a.Reservation_Number=b.Id_Reservation;
...