在查询(ORACLE DB)中用于自我比较的相同表的别名



我有一个客户表,我正在编写一个查询,以查看哪些客户共享相同的电话号码。
结构和查询:

CREATE TABLE Client
(noClient       INTEGER         NOT NULL,
nameClient     VARCHAR(20)     NOT NULL,
noTelephone    VARCHAR(15)     NOT NULL,
PRIMARY KEY    (noClient)
);
SELECT c.nameClient, c2.nameClient2
FROM Client c NATURAL JOIN Client c2(noClient2, nameClient2, noTelephone) 
WHERE c.nomClient < c2.nomClient

这里的问题是我一直得到一个错误

FROM Client c NATURAL JOIN Client c2(noClient2, nameClient2, noTelephone)
*
ERROR at line 2:
ORA-00933: SQL Command not properly ended

是否有一个合适的方法来重命名表和它的列?

我有一个解决方案,但我想知道使查询内的表(和它的列)的别名的正确语法。当然,如果有更好的方法来比较同一个表的值

解决方法是在不重命名列的情况下强制noTelephone上的连接:

SELECT c.nameClient, c2.nameClient
FROM Client c JOIN Client c2 ON c.noTelephone = c2.noTelephone
WHERE c.nameClient < c2.nameClient

如果您的表没有外键约束,则NATURAL JOIN子句将不起作用。

BTW请避免使用自然连接,使用显式JOIN已经解释在这里:https://rules.sonarsource.com/plsql/rspec - 2521

最新更新