【问题标题】:Join tables without foreign key relation and add a column to the result in oracle sql?在oracle sql中加入没有外键关系的表并在结果中添加一列?
【发布时间】:2016-03-21 23:29:56
【问题描述】:

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

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

现在我需要从另一个表(表名是 ITEMNAME)中添加 1 列 (ITEMNAME.NAME)。 这是表 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 处注意这一点。

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

【问题讨论】:

  • 一旦其中一件商品开始销售,您就有麻烦了。
  • 您不能根据您已经必须在 itemname 表中引入的价格列添加另一个联接,然后将其添加到结果中吗?

标签: sql database oracle jointable


【解决方案1】:

说从 Table1 中选择 ID、Order_Number、Price 给

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 取决于您的要求。

【讨论】:

    【解决方案2】:

    如果您正在编写一个严肃的应用程序,那么您确实需要立即对您的表格设计进行调整。 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-29
      • 2021-04-23
      • 2013-02-24
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多