连接没有外键关系的表,并在oracle sql中为结果添加一列?

时间:2015-12-15 23:55:57

标签: sql database oracle jointable

在一个查询中,我正在加入许多表,并得到如下结果:

ID   ORDER_NUMBER   PRICE    
===  ============   =====   
01    21            100        
02    22            300        
03    23            400    
04    24            900
05    25            100

现在我需要从另一个表中添加1列(ITEMNAME.NAME)(表名为ITEMNAME)。 这是表ITEMNAME:

ID   PRICE      NAME 
===  ======  ============
20     100      Tablet    
50     300      PC
64     400      XBox
99     900      Laptop 

从以上数据我想(我期待的结果):

ID   ORDER_NUM   PRICE    NAME
==   =========   ======   ============
01      21       100      Tablet
02      22       300      PC 
03      23       400      XBox
04      24       900      Laptop
05      25       100      Tablet

注意:我们可以通过PRICE列加入ITEMNAME表的唯一方法。

我的意思是我想在ITEMNAME表中按其价格显示我当前结果旁边的项目名称。请注意我在预期的最终结果中的ID#01和ID#05。

或者,如果您有任何其他方法可以实现它,请建议。 感谢

2 个答案:

答案 0 :(得分:3)

如果您正在撰写认真的应用程序,那么您真的需要立即对您的桌面设计进行调整。 price列不是可靠的连接列,至少有两个原因:

  • 多个item可以拥有相同的price
  • 当您决定更改item
  • 的价格时会发生什么?

相反,请考虑在item_id表中添加orders列,该列将是itemname.id上的外键。

然后,您的查询只需要在该外键关系上进行简单连接即可可靠地返回结果:

select o.id, o.order_number, o.price, i.name
  from orders o
  join itemname i
    on i.id = o.item_id
 order by o.id

答案 1 :(得分:2)

说出选择ID,Order_Number,来自Table1的价格

ID ORDER_NUMBER价格
=== ============ =====
01 21 100
02 22 300
03 23 400
04 24 900 05 25 100

select t1.ID, t1.Order_Number, t1.Price,(select ITEMNAME.NAME from ITEMNAME where ITEMNAME.PRICE = t1.Price) from Table1 t1

但请注意,上面的代码可能会为您提供更多的记录获取次数。为此你需要使用distinct或Rownum = 1取决于你的要求。