【问题标题】:mysql using subquery with no joinmysql使用没有连接的子查询
【发布时间】:2018-11-22 17:41:37
【问题描述】:

这里是相关表格

movie(id, title, relYear, category, runTime, director,
studioName, description, rating)

actor(aID, fName, surname, gender)

stars(movieID, actorID)

movGenre(movieID, genre) 

我只是想返回“迈克尔·法斯宾德”主演的电影使用子查询...电影中的“id”指的是电影 id不是演员 id,如果是这样的话我可以的

SELECT title, category
FROM movie 
WHERE 'id' =(SELECT 'aID'
             FROM actor
             WHERE fName='Michael' and surname='Fassbender')

有没有办法在不使用任何连接的情况下做到这一点?

【问题讨论】:

  • 是的,没有JOINs 有一些方法可以做到这一点,但为什么呢?甚至没有 MySQL 也有办法做到这一点,但为什么呢?

标签: mysql join subquery


【解决方案1】:

您可以使用Correlated SubqueryExists()

SELECT m.title, m.category
FROM movie AS m
WHERE EXISTS (SELECT 1
              FROM stars AS s 
              JOIN actor AS a ON a.aID = s.actorID
              WHERE a.fName = 'Michael' AND 
                    a.surname = 'Fassbender' AND
                    s.movieID = m.id)

上述解决方案仍以某种方式使用JOIN(在子查询内)。完全不使用 Join 的解决方案可以是:

SELECT title, category
FROM movie
WHERE id IN (SELECT movieID 
             FROM stars 
             WHERE actorID IN (SELECT aID 
                               FROM actor 
                               WHERE fName = 'Michael' AND 
                                     surname = 'Fassbender'))

P.S.除非这是一些技巧分配/硬件,否则我强烈建议不要在实际应用程序中使用此查询。

【讨论】:

    【解决方案2】:
    SELECT DISTINCT m.title, m.category
    FROM movie 
    INNER JOIN stars s
    ON s.movieID = m.id
    INNER JOIN actors a
    ON s.actorID = a.aID
       AND a.fName='Michael' 
       AND a.surname='Fassbender'
    

    【讨论】:

    • OP 要求没有连接的解决方案 :-) “有没有办法在不使用任何连接的情况下做到这一点?”
    • :-) @MadhurBhaiya 你真的相信你的解决方案没有JOINs吗?做 Ctrl+F ;-) 你会感到惊讶。 :-)
    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 2011-11-25
    • 1970-01-01
    • 2016-03-20
    • 2022-01-02
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多