mysql - 为什么自然连接在以下情况下输出为空集?

标签 mysql sql

在我的 info 数据库中,我有 4 个表,其中两个被命名为 girlsboys 并且都有 id 列。 boys包含12个id(12条记录),girls包含8个id。当我应用此查询时:

SELECT * FROM
boys
NATURAL JOIN
girls

我得到输出为

Empty Set

怎么会这样? (id 列均为 INT、NOT NULL、AUTO_INCREMENT)。

最佳答案

NATURAL JOIN 是 INNER JOIN 的简写,在同名列上具有相等谓词。

例如,给定两个表“m”和“f”,它们有共同的列名为“id”和“name”,像这样的 NATURAL JOIN

 SELECT ...
   FROM m
NATURAL
   JOIN f

相当于:

SELECT ...
  FROM m
  JOIN f
    ON f.id = m.id
   AND f.name = m.name

结果中只会返回两个表中“匹配”的行,不会返回所有其他行。

例如,如果我们有表格内容:

m: id  name
   --  ---------------
    1  peter
    2  paul
    4  michael jackson

f: id  name
   --  ---------------
    3  mary
    4  michael jackson

上面的查询将只返回“m”和“f”中 id=4 的行(作为单行),因为这些是唯一“匹配”的行。

关于mysql - 为什么自然连接在以下情况下输出为空集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616692/

相关文章:

sql - 具有动态列的数据透视示例

mysql - 从具有特殊字符的 MySQL 数据库中获取所有文件,但我不想对查询中的所有特殊字符使用 "or"条件

SQL 检索方差较小的厚度值

mysql - 为什么 NHibernate SchemaUpdate 在 MySQL 中比在 MS SQL Server 中慢得多

mysql - 如何从 bash 中的 MySQL 查询结果中获取字段

php - 用于 WordPress 中非唯一列更新的 MySQL 重复条目

java - 如何使用hibernate在spring mvc中将userid从一个表传递到另一个表

php - 导入 140 万行 800mb 制表符分隔文件的最佳方法是什么?

php - MySQL 计算具有行值的数据,无需新的查询循环

mysql - 在 SQL 中存储游戏 map