【问题标题】:How to do an Intersect query in MySQL?如何在 MySQL 中进行相交查询?
【发布时间】:2018-10-04 19:18:47
【问题描述】:

我有两个 sql 查询,我需要它们之间的相交。我知道 mysql 没有 intersect 操作数,那我该怎么做呢?尝试了一些我在网上找到的解决方案,但它们都返回了一些语法错误。查询是:

SELECT person_name FROM person NATURAL JOIN (
  SELECT * FROM movie NATURAL JOIN role WHERE movie_name = 'Alien'
  ) alias1

SELECT person_name FROM person WHERE gender = 'f'

【问题讨论】:

  • personmovie 表有什么关系?
  • 自然联接很方便,但不如其他联接(使用 ON 或 USING 条件)稳定,并且不会为此类问题间接记录您的表。
  • 您可以通过使用ON条件与两个表之间的公共列连接来实现它。
  • 您可以只将第二个查询中的 WHERE 子句添加到第一个查询中。
  • 什么版本的 MySQL? 5.x 还是 8.x?

标签: mysql sql


【解决方案1】:

您可以将所有三个表都JOIN 一起应用,并应用两个WHERE 子句。

这是一个例子。它假设您的movie 表在名为movie_id 的列上连接到您的role 表,并假设您在roleperson 中有一个person_id 列来加入它们。您需要更改此查询以使用您的表使用的列。

SELECT
    p.person_name
FROM
    movie m
    INNER JOIN role r
        ON (m.movie_id=r.movie_id)
    INNER JOIN person p
        ON (r.person_id=p.person_id)
WHERE
    m.movie_name='Alien'
    AND p.gender='f'

编辑:我在这里使用了INNER JOIN,并猜测要加入的列,而不是保留OP 的NATURAL JOIN。正如 OP 的 cmets 所提到的,最佳实践是明确识别连接,而不是依赖于 NATURAL JOIN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多