【问题标题】:Full outer join in mysql with movie databasemysql 与电影数据库的完全外连接
【发布时间】:2015-10-07 02:00:59
【问题描述】:

您好,我有以下表格和列。

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

【问题讨论】:

    标签: mysql sql full-outer-join


    【解决方案1】:

    我会使用聚合和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;
    

    【讨论】:

      【解决方案2】:

      关联子查询中的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

      【讨论】:

        猜你喜欢
        • 2013-03-11
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-09
        • 2011-12-26
        相关资源
        最近更新 更多