MySQL Как выбрать экземпляры объекта, которые связаны со всеми другими экземплярами другого объекта?MySql

Форум по Mysql
Ответить
Anonymous
 MySQL Как выбрать экземпляры объекта, которые связаны со всеми другими экземплярами другого объекта?

Сообщение Anonymous »

У меня есть эти 3 таблицы:

Код: Выделить всё

CREATE TABLE Fair(
Title varchar(100),
Year int,
PRIMARY KEY(Titolo, Anno),
);

CREATE TABLE Animal(
ID int PRIMARY KEY,
Species varchar(100),
Name varchar(100),
);

CREATE TABLE Participation(
Fair_Title varchar(100),
Fair_Year int,
Animal_ID int,
FOREIGN KEY(Fair_Title, Fair_Year) references Fair(Title, Year),
FOREIGN KEY(Animal_ID) references Animale(ID),
PRIMARY KEY(Fair_Title, Fair_Year, Animal_ID)
);
Мне нужно выбрать всех животных, которые участвовали во всех ярмарках 2023 года.
Сейчас я пытаюсь сделать это следующим образом:

Код: Выделить всё

SELECT DISTINCT A.Name as Animal_Name
FROM animal A JOIN participation P ON (A.ID = P.Animal_ID)
WHERE (P.Fair_Year = 2023) AND
NOT EXISTS (
SELECT F.Title FROM fair F
WHERE F.Title NOT IN(
SELECT P1.Fair_Title
FROM animae A1 JOIN participation P1 ON (A1.ID = P1.ID)
WHERE (A1.ID = A.ID AND P1.Fair_Year = 2023)
)
);
Однако это просто возвращает пустую таблицу, даже если в базе данных есть животное, которое участвует во всех ярмарках 2023 года. Что я делаю не так?
Пример данных:
ЯРМАРКИ - («Ярмарка 1», 2023 г.),
("Ярмарка 2", 2023 г.),
("Ярмарка 3", 2022 г.),
("Ярмарка 4", 2022 г. );
Животные - (0, «Свинья», «Свинья»),
(1, «Коза», «Люси»),
(2, «Корова», «Майя»),
(3, «Кот», «Мело»),
( 4, «Собака», «Дела»);
Участие - ("Ярмарка 1", 2023, 3, 100),
("Фиера 2", 2023, 3, 100),
(" Фиера 1", 2023, 4, 100),
("Фиера 2", 2023, 4, 100),
("Фиера 2", 2023, 2, 100),
("Ярмарка 1", 2023, 2, 100),
("Ярмарка 2", 2022, 1, 100),
("Ярмарка 1", 2023, 1, 100),
("Ярмарка 4", 2022, 1, 100),
("Ярмарка 4", 2022, 4, 100),
("Ярмарка 4", 2022, 0, 100),
("Фиера 1", 2023, 0, 100);
Ожидаемые результаты: Майя, Мело, Дела, поскольку именно эти животные участвовали в обеих ярмарках 2023 года.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -all-other
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»