'隐式'基于架构的外键加入?

时间:2013-07-30 13:58:12

标签: sql oracle join oracle10g

Hello all :)我想知道是否有办法告诉数据库查看架构并推断出JOIN谓词:

+--------------+     +---------------+
| 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

为:

SELECT * FROM prices IMPLICIT JOIN product

2 个答案:

答案 0 :(得分:3)

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

select * from t1 natural join t2

Oracle将查找具有相同名称的列并通过它们加入(在您的情况下不是这样)。请参阅documentation on the SELECT statement

  

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

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

答案 1 :(得分:2)

你不应该这样做。一些数据库系统允许你,但如果你修改fk(即添加外键)怎么办?您应该始终说明要加入的内容以避免出现问题。大多数数据库系统甚至不允许你进行隐式连接(好!)。