0

你好,我的主要目标是获取 x 个表并加入它们,而不会获取用于检测加入操作的行的重复列。所以我发现自然加入是我一直在寻找的:

不想要内部连接的结果:

http://s11.postimg.org/ujtadadj7/image.png

自然加入的好结果:

http://s28.postimg.org/yy6tmca0d/image.png

问题是,当我尝试对其他表(不是用户)执行相同操作时,我得到零结果):

select * from guilds natural join players;

公会表有 guild_id,玩家有 guild_id。

为什么会这样?我应该如何实现我的目标是否有另一种方法?请帮助我,我整天都在寻找解决方案。. . 感谢所有愿意提供帮助的人!

4

1 回答 1

1

如果您执行 a NATURAL JOIN,您的连接将在连接表共有的每一列上完成;因此,如果您有多个具有相同名称的列,它们都将用于连接。这可能是您的结果中没有行的原因。

INNER JOIN可以像您一样使用类似ON (tab1.field = tab2.field)或使用USING子句的方式完成,而无需重复字段;

SQL> select *
  2  from dual
  3  natural join dual;

DUMMY
----------
X

SQL> select *
  2  from dual d1
  3  inner join dual d2 on (d1.dummy = d2.dummy);

DUMMY      DUMMY
---------- ----------
X          X

SQL> select *
  2  from dual d1
  3  inner join dual d2 using(dummy);

DUMMY
----------
X
于 2016-03-07T21:48:33.763 回答