Полное внешнее соединение в MySQL с базой данных фильмов

Привет у меня есть следующие таблицы и столбцы.

movie: ID, title

person: ID, name

involved: personID, movieID

Мне нужно ответить на вопрос:

"В каких фильмах снимались либо Джон Траволта, либо Ума Турман, но не оба снялись?"

Я не мог понять, как это сделать без создания новых таблиц, поэтому я сделал 2 новые таблицы. И попытался сделать полное внешнее соединение, где вы не получаете пересекающихся результатов. Я обнаружил, что вы не можете делать полные внешние объединения в mysql, но пришлось выполнить левое соединение, объединенное с правым соединением. Я попробовал это, но не получил желаемых результатов. Я застрял на некоторое время сейчас. Может кто-то указать мне верное направление?

Это то, что я до сих пор.

DROP TABLE IF EXISTS Umatable;
DROP TABLE IF EXISTS Johntable;

CREATE TABLE Umatable(title VARCHAR(500));
CREATE TABLE Johntable(title VARCHAR(500));

INSERT INTO Umatable
SELECT m.title
FROM movie m, person p, involved i
WHERE p.name = "Uma Thurman"
AND p.id = i.personid
AND m.id = i.movieiD;

INSERT INTO Johntable
SELECT m.title
FROM movie m, person p, involved i
WHERE p.name = "John Travolta"
AND p.id = i.personid
AND m.id = i.movieiD;

SELECT * 
FROM Umatable
LEFT JOIN Johntable ON Umatable.title = Johntable.title
WHERE Johntable.title IS NULL OR Umatable.title IS NULL
UNION
SELECT *
FROM Umatable 
RIGHT JOIN Johntable ON Umatable.title = Johntable.title
WHERE Johntable.title IS NULL OR Umatable.title IS NULL

2 ответа

Я бы сделал это с помощью агрегации и having:

select i.movieId
from involved i join
     person p
     on p.id = i.personId
group by i.movieId
having sum(p.name in ('John Travolta', 'Uma Thurman')) = 1;

count(*) внутри коррелированного подзапроса будет работать:

select *
  from movie m
 where 1 = (select count(*)
              from involved i
              join person p
                on p.ID = i.personID
               and p.name IN ('John Travolta', 'Uma Thurman')
             where i.movieID = m.ID)

SQLFiddle Demo

Другие вопросы по тегам