我正在尝试为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.
,但是我得到了相同的错误消息。
答案 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);