weixin_38647584 2022-11-22 14:20 采纳率: 69.2%
浏览 9
已结题

Oracle数据库查询语句交集并集问题

数据查询语句,有AB两张价格表,比方A是订单价格,B是进货价,两表的结构如下, A表:物品id ,供应商id, 订单价格 其他字段,B表:物品id ,供应商id, 进货价,首先确定一条数据唯一性是物品id和供应商id,两表一样,目前的情况是A表10W多数据,B表有20万条数据,两张表可能且一定会有同样物品id和供应商id的数据,要做个查询
A表和B表如何做关联,如A表有两个商品,1.足球,物品ID是A001,供应商G001,订单价格100,1.排球,物品ID是A004,供应商G004,订单价格120,然后B表有3条数据, 足球商品,物品ID是A001,供应商G001,进货价格50, 羽毛球商品,物品ID是A002,供应商G002,进货价格10 , 乒乓球商品,物品ID是A003,供应商G003,进货价格5
期望的结果,关键点,A表和B表的物品ID和供应商ID内容一样,但是字段命名不同,A表字段:物品ID是 “goods_id”,供应商ID是"supplier_id",B表商品id是“material_id” ,供应商ID"provider_id"
且两张表字段数量也不一样,是完全无关的两张表,只有物品id和供应商id的内容存在相同的关系

img

这个关联条件物品id和供应商,且他们是各自都是单独存在的,没有主表从表一说
希望得到大家的帮助,用的数据库是Oracle,这个关联sql怎么写才能达到我要的这样的效果,希望大家指点指点
  • 写回答

2条回答 默认 最新

  • Check_Const 2022-11-22 16:00
    关注

    可以尝试用全连接 FULL join (FULL OUTER JOIN)

    -- SQL Server 测试 (Oracle语法大部分类似)
    select
    case when A.物品名称 is not null then A.物品名称 else B.物品名称 end 物品名称,
    case when A.goods_id is not null then A.goods_id else B.material_id end 物品ID,
    case when A.supplier_id is not null then A.supplier_id else B.provider_id end 供应商ID,
    A.订单价格,B.进货价格
    from
    (
       select '足球' as 物品名称,'A001' as goods_id,'G001' as supplier_id,100 as 订单价格
       union all
       select '排球' as 物品名称,'A004' as goods_id,'G004' as  supplier_id,120 as 订单价格
    ) as A
    Full join
    (
       select '足球' as 物品名称,'A001' as material_id,'G001' as provider_id,50 as 进货价格
       union all
       select '羽毛球' as 物品名称,'A002' as material_id,'G002' as provider_id,10 as 进货价格
       union all
       select '乒乓球' as 物品名称,'A003' as material_id,'G003' as provider_id,5 as 进货价格
    ) B
    on A.goods_id=B.material_id and A.supplier_id=B.provider_id
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月13日
  • 已采纳回答 12月5日
  • 修改了问题 11月22日
  • 修改了问题 11月22日
  • 展开全部

悬赏问题

  • ¥15 java map类型数据格式,如何快速通过前缀匹配元素
  • ¥15 stc12c5a60s2、QMC5883L、LCD1602组合测量磁场所需程序
  • ¥15 vba参数转c++ SAFEARRAY
  • ¥20 Win11测试yolov4,“找不到nvcuda.dll”怎么办?
  • ¥15 simulink绘制bode图
  • ¥15 php_network_getaddresses: getaddrinfo failed: Name or service not known
  • ¥15 用msg发消息出现的问题
  • ¥15 unity3d机械臂
  • ¥20 判断两个表是否完全相同
  • ¥20 工控机出现散热器转一下停一下这种情况,是什么原因造成的