我正在尝试使用“USING”而不是“ON”来进行查询。
问题是,在**“Employees”表中,它被称为“codigo”,而在“trabajan”表中,它被称为“cod_emp”**。
使用USING,您将如何连接这两个表?根据Oracle文档,这是可能的,但我不能得到它。
SELECT NOMBRE, FUNCION
FROM EMPLEADOS
JOIN TRABAJAN USING (CODIGO,COD_EMP);
Oracle文档中的示例:https://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqljusing.html
下一个查询与上面的查询类似,但它具有额外的连接条件COUNTRIES.COUNTRY_ISO_CODE等于CITIES.COUNTRY_ISO_CODE:
SELECT * FROM COUNTRIES JOIN CITIES
USING (COUNTRY, COUNTRY_ISO_CODE)
3条答案
按热度按时间xam8gpfp1#
来自Oracle 19c文档,而不是您链接到的JavaDB文档,并强调了以下内容:
当指定两个表中同名列的等联接时,USING列子句指示要使用的列。**仅当两个表中的联接列具有相同的名称时,才可以使用此子句。**在此子句中,不要使用表名或表别名来限定列名。
如果你真的必须使用
USING
进行赋值,那么你可以这样做,如果你在子查询中对其中一个列名使用别名:这似乎不是很“舒服”。使用
ON
来处理名称差异更简单:fiddle
用表名或别名限定所有列名也是一个好主意,这样你就可以看到每一列来自哪里,你可以使用表别名来缩短它,例如。
(But你 * 不要 * 用
USING
限定公共列,我个人觉得这很混乱,这也是避免这种形式的连接语法的另一个原因。u0sqgete2#
为什么你不应该在Oracle中使用“USE”?快速的咆哮
简而言之,永远不要使用自然连接。
pkwftd7m3#
我会避免这样的连接定义。我宁愿写下面这样:
这样更清晰,并允许更复杂的连接条件。还要注意别名的使用,如果select语句中的两个或多个不同的表中有同名的列,这一点非常重要。我从来没有使用过这种方式来编写连接或所谓的自然连接,也从来没有觉得我需要这样做。