0

こんにちは、次のテーブルと列があります。

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
4

2 に答える 2

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;
于 2015-10-07T02:22:17.640 に答える