尝试与自然联接生成的相同关系进行比较时出现语法错误

时间:2019-07-02 03:08:38

标签: mysql sql natural-join

我正在尝试为MySQL数据库编写查询,该查询比较自然连接所生成的相同关系中的两个元组。

数据库具有关系author和author_number,可以自然地将它们连接起来以创建一个关系,该关系显示所有作者及其所有电话号码。

我正在尝试编写一个查询,该查询仅返回共享相同电话号码的作者的元组。

我写了一个查询,认为它背后有正确的主意,但是我做错了,因为尝试运行它时遇到语法错误。

这是我当前可以查询的查询:

SELECT A.first_name, A.last_name, A.pNumber
FROM (author NATURAL JOIN author_number AS A), (author NATURAL JOIN author_number AS B)
WHERE A.pNumber = B.pNumber;

查询给出错误:

  

ERROR 1066 (42000) at line 60 in file: 'QueryLib.sql': Not unique table/alias: 'author'

我的原始查询的A.first_name, etc.子句中没有SELECT,它只有first_name, etc.,但是我得到了相同的错误消息。

1 个答案:

答案 0 :(得分:2)

首先请注意,自然连接被认为是有害的:Is NATURAL (JOIN) considered harmful in production environment?。最好编写一个显式的内部联接。

回到您的问题。您需要从自然联接中引用各个表。例如:

SELECT
  A1.first_name, A1.last_name, AN1.phone_number
FROM
  Author A1 NATURAL JOIN AuthorNumber AN1,
  Author A2 NATURAL JOIN AuthorNumber AN2
WHERE
  AN1.phone_number = AN2.phone_number AND
  NOT (A1.first_name = A2.first_name AND A1.last_name = A2.last_name);

演示http://sqlfiddle.com/#!9/ba2951/7