所以我只需要返回所有演员以及他们在其中表演的电影,而我不能使用externaljoin,这会使这一切变得容易得多。
这是数据库:
CREATE TABLE actors(
AID INT,
name VARCHAR(30) NOT NULL,
PRIMARY KEY(AID));
CREATE TABLE movies(
MID INT,
title VARCHAR(30),
PRIMARY KEY(MID));
CREATE TABLE actor_role(
MID INT,
AID INT,
rolename VARCHAR(30) NOT NULL,
PRIMARY KEY (MID,AID),
FOREIGN KEY(MID) REFERENCES movies,
FOREIGN KEY(AID) REFERENCES actors);
这是我尝试过的方法,它返回除了没有在电影中演出的演员之外的所有我需要的东西,
SELECT name,title
FROM actors, actor_role, movies
where actors.AID = actor_role.AID and movies.mid = actor_role.mid;
我只需要更改上述SQL,以包括没有在任何电影中演出过的演员,而无需使用SQL OUTER JOIN语法即可。任何帮助将不胜感激。
答案 0 :(得分:1)
好吧,您可以UNION ALL
个演员,actor_role
中没有相应的行退出。
SELECT a.name,
m.title
FROM actors a
INNER JOIN actor_role ac
ON a.aid = ac.aid
INNER JOIN movies m
ON m.mid = ac.mid
UNION ALL
SELECT a.name,
NULL
FROM actors a
WHERE NOT EXISTS (SELECT *
FROM actor_role ac
WHERE ac.aid = a.aid;
我还建议对隐式语法使用显式JOIN
语法。