Sql 基于架构外键的“隐式”联接?

Sql 基于架构外键的“隐式”联接?,sql,oracle,join,oracle10g,Sql,Oracle,Join,Oracle10g,Hello all:我想知道是否有方法告诉数据库查看模式并推断连接谓词: +--------------+ +---------------+ | prices | | products | +--------------+ +---------------+ | price_id (PK)| |-1| product_id(PK)| | prod_id |*-| | weight | | shop |

Hello all:我想知道是否有方法告诉数据库查看模式并推断连接谓词:

+--------------+     +---------------+
| prices       |     | products      |
+--------------+     +---------------+
| price_id (PK)|  |-1| product_id(PK)|
| prod_id      |*-|  | weight        |
| shop         |     +---------------+
| unit_price   |
| qty          |
+--------------+
在Oracle 10g中,是否有更好的方法:

SELECT * FROM prices JOIN product ON prices.prod_id = products.product_id
致:


从Price Simplicit JOINproduct中选择*您不应该这样做。某些db系统允许您更改fk,但如果您修改fk,即添加外键,该怎么办?您应该始终说明要加入什么以避免出现问题。大多数数据库系统甚至不允许您进行隐式连接,尽管这很好

你不应该那样做。某些db系统允许您更改fk,但如果您修改fk,即添加外键,该怎么办?您应该始终说明要加入什么以避免出现问题。大多数数据库系统甚至不允许您进行隐式连接,尽管这很好

最接近于不写入实际连接条件的是自然连接

select * from t1 natural join t2
Oracle将查找具有相同名称的列,并通过它们进行联接。在您的情况下,这是不正确的。见:

自然联接基于两个表中具有相同名称的所有列。它从相关列中具有相等值的两个表中选择行。如果同名的两列没有兼容的数据类型,则会引发错误


这是一种非常糟糕的做法,我强烈建议不要在任何环境中使用它

最接近于不编写实际连接条件的是自然连接

select * from t1 natural join t2
Oracle将查找具有相同名称的列,并通过它们进行联接。在您的情况下,这是不正确的。见:

自然联接基于两个表中具有相同名称的所有列。它从相关列中具有相等值的两个表中选择行。如果同名的两列没有兼容的数据类型,则会引发错误


这是一种非常糟糕的做法,我强烈建议不要在任何环境中使用它

不,这是不可能的。这很好,因为它也不太可维护。不,这不可能。这很好,因为它也不太可维护。