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