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

Syntax Error when trying to make a comparison with the same relation generated by a natural join

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

数据库有关系 author 和 author_number,可以自然连接以创建显示所有作者及其所有 phone 编号的关系。

我正在尝试编写一个查询,该查询 returns 仅为共享相同 phone 号码的作者的元组。

我写了一个查询,我相信它背后的想法是正确的,但是我做错了,因为当我尝试 运行 它时出现语法错误。

这是我目前认为可行的查询:

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'

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

首先请注意,自然连接被认为是有害的: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.