Я смущен запросом MySQL.mysql путаница запроса с использованием in и количества естественного объединения
Пусть говорят, что мы имеем
CREATE TABLE person (
pid VARCHAR(50) PRIMARY KEY,
passwd CHAR(32) NOT NULL,
fname VARCHAR(50),
lname VARCHAR(50),
d_privacy INT NOT NULL -- change from part 1 spec, which said varchar
);
CREATE TABLE event (
eid INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
start_time TIME NOT NULL,
duration TIME NOT NULL,
description VARCHAR(50),
pid VARCHAR(50),
FOREIGN KEY (pid) REFERENCES person(pid)
);
CREATE TABLE invited (
pid VARCHAR(50) NOT NULL,
eid INT NOT NULL,
response INT,
visibility INT,
PRIMARY KEY (pid, eid),
FOREIGN KEY (pid) REFERENCES person(pid),
FOREIGN KEY (eid) REFERENCES event(eid)
);
CREATE TABLE friend_of (
sharer VARCHAR(50) NOT NULL,
viewer VARCHAR(50) NOT NULL,
level INT,
PRIMARY KEY (sharer, viewer),
FOREIGN KEY (sharer) REFERENCES person(pid),
FOREIGN KEY (viewer) REFERENCES person(pid)
);
Например сказать, что я зритель = «AA» и хотят видеть график зрителя все SHARER в (eid
и description
) Я попробовал это в и естественное соединение количество, но код выглядит уродливым ...
select *
from invited natural join person
where person.pid in
(
select pid
from invited
where pid in(
SELECT sharer
from friend_of
natural join invited
where friend_of.viewer = 'AA'
and friend_of.sharer = invited.pid
))
Этот код еще не закончен. Мне нужно естественное соединение с событием и введите описание количества. но я застрял здесь
если у вас есть лучший способ написать эту функцию, пожалуйста.
Что вы хотите сказать? Вместо использования 'IN', вы должны присоединиться к другим таблицам. – Barmar
PID события является создателем pid. это дает мне проблему с присоединением к другим таблицам. другой PID - тот, кто приглашен на вечеринку. – Kingkong