Oracle 多次更新查询

2024-01-19

我的数据库中有两张如下表所示的表。在每个 DEPARTMENT_CODE 的第一个表 ITEM 中,将有多个 ITEM_CODE。

ITEM
----------------------------------------------------
"STORE_CODE" "ITEM_CODE" "DEPARTMENT_CODE"
"011"         "912003" "14"
"011"         "912004" "14"
"011"         "914001" "14"
----------------------------------------------------

COMPETITOR
--------------------------------------------------------------
"STORE_CODE"  "ITEM_CODE" "DEPARTMENT_CODE" "COMPETITOR_CODE"

"011"     "912003"     "14"       "01"
"011"     "912003"     "14"       "02"
"011"     "912003"     "14"       "03"
"011"     "912004"     "14"       "01"
"011"     "912004"     "14"       "02"
"011"     "912004"     "14"       "04"
"011"     "914001"     "14"       "01"
"011"     "914001"     "14"       "02"
"011"     "914001"     "14"       "03"
-------------------------------------------------------------

在表 COMPETITOR 中,每个 ITEMCODE 将具有三个条目,并且具有不同的 attendant_Code

我有三个值Comp_1、comp_2、comp_3和department_code = 14;

我想要做的是用 comp_1、comp_2、comp_3 更新 COMPETITOR 表,以获取 ITEM 表中的 Department_id 为 14 的每个项目代码

样本输出

COMPETITOR
--------------------------------------------------------------
"STORE_CODE"  "ITEM_CODE" "DEPARTMENT_CODE" "COMPETITOR_CODE"

"011"     "912003"     "14"       "Comp_1"
"011"     "912003"     "14"       "Comp_2"
"011"     "912003"     "14"       "Comp_3"
"011"     "912004"     "14"       "Comp_1"
"011"     "912004"     "14"       "Comp_2"
"011"     "912004"     "14"       "Comp_3"
"011"     "914001"     "14"       "Comp_1"
"011"     "914001"     "14"       "Comp_2"
"011"     "914001"     "14"       "Comp_3"
-------------------------------------------------------------

我如何为此编写一个 Oracle 查询?


以下假设仅将一个 ITEM_CODE 分配给一个 DEPARTMENT_CODE,因为这很简单,并且您没有向我们提供任何进一步的业务规则。如果这个假设是错误的,您将需要相应地调整逻辑。

我还纳入了您的要求,即 COMPETITOT.COMPETITOR_CODE 的现有值不可靠。

鉴于此测试日期:

SQL> select * from competitor
  2  /

STORE_CODE  ITEM_CODE DEPARTMENT_CODE COMPETITOR
---------- ---------- --------------- ----------
        11     912003              14 01
        11     912003              14 04
        11     912003              14 03
        11     912004              14 01
        11     912004              14 02
        11     912004              14 04
        11     914001              14 01
        11     914001              14 02
        11     914001              14 05

9 rows selected.

SQL>

我们可以使用分析 ROW_NUMBER() 来生成 COMPETITOR_CODE 所需的句柄:

SQL> update competitor c
  2  set competitor_code =
  3          (select decode (dr
  4                         , 1, 'Comp_1'
  5                         , 2, 'Comp_2'
  6                         , 3, 'Comp_3')
  7             from ( select row_number() over ( partition by x.item_code
  8                                                  order by x.rowid ) as dr
  9                           , x.rowid as row_id
 10                    from competitor x
 11                    where x.item_code in ( select item_code
 12                                           from item
 13                                           where  department_code = 14 ) ) l
 14             where c.rowid = l.rowid )
 15  /

9 rows updated.

SQL>

这是期望的结果(除非进一步添加业务规则):

SQL> select * from competitor
  2  /

STORE_CODE  ITEM_CODE DEPARTMENT_CODE COMPETITOR
---------- ---------- --------------- ----------
        11     912003              14 Comp_1
        11     912003              14 Comp_2
        11     912003              14 Comp_3
        11     912004              14 Comp_1
        11     912004              14 Comp_2
        11     912004              14 Comp_3
        11     914001              14 Comp_1
        11     914001              14 Comp_2
        11     914001              14 Comp_3

9 rows selected.

SQL>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle 多次更新查询 的相关文章

  • 查看oracle中重复行的所有数据

    我有一个有 6 列的表 id name type id code lat long 前三个是必需的 ID是私钥 按序列自动插入 我有一些重复的行 正如两者所定义的name and type id是平等的 但我想查看受骗者的所有数据 我可以很
  • SQL如何显示某个日期之前的数据

    我有几张桌子 一个是一个工人表显示工人代码 名字和姓氏 工作日期其中显示工人代码 工作开始日期 结束日期和工作区域代码 导师有工人编号 名字 姓氏和工作区号 Job area有工作区域代码名称和主管 我想要做的是在日期 10 09 10 之
  • 如何查看任意 Oracle 会话正在使用的事务隔离级别

    我试图找出特定会话 不是我自己的会话 在 Oracle 服务器上的隔离级别 有 v 视图可以得到这个吗 您可以在中测试位 28flag列于v transaction 1 http forums oracle com forums threa
  • 在 PL/SQL 中创建队列订阅者的语法是什么?

    我正在尝试创建一个队列和一个在消息排队时触发的回调 但我无法触发回调 我究竟做错了什么 我有一个将消息入队的触发器 我可以在队列消息表上看到它 我可以手动将其出队并处理它 我只是无法在入队时触发回调 BEGIN DBMS AQADM CRE
  • 从 CTE 插入

    WITH DTL AS SELECT CMPI CODE CMN CDTY MTRL CMI WT FACTOR CMI CNTRCT RATE PL PRESENT PRICE TRM CODE ROUND NVL PRESENT PRI
  • SQL 中的代码重用和模块化

    代码重用和模块化对于 SQL 存储过程编程来说是一个好主意吗 如果是这样 将这些功能添加到 SQL 存储过程代码库的最佳方法是什么 我通常为常见且重复的任务创建标量值函数 我发现它不仅可以简化与现有程序类似的新程序的开发 而且还有助于错误跟
  • max()、分组依据和排序依据

    我有以下 SQL 语句 SELECT t client id max t points AS max FROM sessions GROUP BY t client id 它只是列出了客户 ID 以及他们所获得的最大积分 现在我想按 max
  • JbdcTemplate - 带有动态 SQL 查询的PreparedStatements

    I know jdbcTemplate可以用来创建PreparedStatements如果你这样设置 i e private JdbcTemplate jdbcTemplate String sqlQuery Select from tab
  • TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

    考虑一个保存日志数据的 SQL Server 表 重要的部分是 CREATE TABLE dbo CustomerLog ID int IDENTITY 1 1 NOT NULL CustID int NOT NULL VisitDate
  • 如何在Oracle中将“(Ab56.12345)some_string”的一个字符串列拆分为两列“Ab.12345”,“some_string”

    正如问题一样 如何拆分一个字符串列 Ab56 12345 some string到两列Ab56 12345and some string在甲骨文中 注意 并非所有列都 Ab56 12345 some string 部分列仅some stri
  • PostgreSQL & regexp_split_to_array + 取消嵌套

    我有这样的绳子 测试1 纽约 X 测试 2 芝加哥 Y 测试 3 宾夕法尼亚州哈里斯堡 Z 我需要的结果是 Column1 Column 2 Column3 Test 1 new york X Test 2 chicago Y Test 3
  • MySQL解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • C# 查询两个数据库的数据

    我目前有一个查询 我正在从两个不同的数据库获取数据 这些数据被附加到一个名为 accountbuys 的列表中 我的第一个表有三个数据条目 3个想要购买股票的帐户 下一张表有 17 个数据点 购买 17 只股票 I am merging t
  • oracle to_date 转换显示文字与字符串格式不匹配

    如果我使用 unixtime 转换器 我会得到 2005 年 5 月 31 日星期二 16 23 17 GMT 1117556597 如果我运行以下查询 则会收到错误 文字与字符串格式不匹配 这是为什么 select to date 111
  • 了解涉及 3 个或更多表时 JOIN 的工作原理。 [SQL]

    我想知道是否有人可以帮助我提高对 SQL 中 JOIN 的理解 如果它对问题很重要 我会特别考虑 MS SQL Server 取 3 个表 A B A 通过某些 A AId 与 B 相关 和 C B 通过某些 B BId 与 C 相关 如果
  • Postgresql存储过程中基于会话的全局变量?

    在 Oracle 的 PL SQL 中 我可以使用包定义创建基于会话的全局变量 对于 Postgresql 的 PLpg SQL 这似乎是不可能的 因为没有包 只有独立的过程和函数 以下是 PL SQL 将 g spool key 声明为全
  • If Else 条件的 SQLite 语法

    我正在使用 SQLite 数据库 我的表有一个名为 密码 的文本列 早些时候 为了检索我用来执行简单操作的值select from myTable询问 但现在的要求是 如果Password值不是NULL那么我需要将其显示为 是 或 否 它是
  • 如何将此本机 SQL 查询转换为 HQL

    所以我有这个很长的复杂的 Native SQLQuery string hql SELECT FROM SELECT a rownum r FROM select f2 filmid f2 realisateurid f2 titre f2
  • jDBI中如何进行内查询?

    我怎样才能在 jDBI 中执行这样的事情 SqlQuery select id from foo where name in
  • ActiveRecord 查询,按关联排序,最后一个 has_many

    我试图列出所有Users by the created at最近创建的关联记录 通讯 列 到目前为止我所拥有的 User includes communications order communications created at IS

随机推荐

  • 缓存和重用函数会导致 Tornado

    我有一个昂贵的功能要包含在我的 Tornado 应用程序中 功能 返回多个输出 但由于遗留原因 这些输出被访问 分别通过不同的处理程序 有没有办法只执行一次函数 然后将结果重复使用 不同的处理程序并保留 Tornado 的异步行为 from
  • AttributeError:“GridSearchCV”对象没有属性“best_params_”

    网格搜索是一种从我们指定的组合中找到任何模型的最佳参数的方法 我已经通过以下方式对我的模型进行了网格搜索 并希望找到使用此网格搜索识别的最佳参数 from sklearn model selection import GridSearchC
  • 为什么带有 Junit 5 的 spring Boot 2.4.5 和模拟 bean 会抛出 StackOverflowError?

    Context 升级后的gradle自5 5 1 to 7 0 2 已测试 一切正常 spring从2 1 5升级到2 4 1 将测试注释从 junit 4 迁移到 junit 5 Result 单元测试工作 集成测试DO NOT work
  • openshift 上的 Rails 控制台

    我将 Rails 应用程序部署到 openshift 它运行良好 但我无法在生产服务器上运行 rails 控制台 它给了我这个错误 我该如何解决这个问题 我尝试更新 ruby gems 但它也给出了权限被拒绝的错误 我也无法成功 导轨c错误
  • Python 3.5.1 - 将同一输入行上的多个整数读取到列表中

    我正在使用 python 3 5 1 并通过 Windows 上的命令提示符运行我的文件 参数在程序运行后传递 即程序根据先前生成的列表提示输入 我希望在同一行上读取多个数字 并用空格分隔 Python 2 X 中 raw input 不会
  • adb logcat -f log.txt 错误:无法打开输出文件:只读文件系统

    在 Windows win7 上 通过 USB 调试真实手机 我想将 logcat 日志转储到我的 PC 上的文件中 数据速率超出了 Eclipse 的可用范围 我想要整个未过滤的日志 根据logcat 命令行说明 http develop
  • 让 IAlert 作为观察者

    我正在使用最后的硒 一些网站会随机弹出消息 停止正常的测试过程 我的想法是 我需要将 IAlert 作为观察者模式来捕获警报 接受警报并从其停止处理弹出窗口的点继续测试 警报代码 try IAlert alert driver Switch
  • 在 Java 中检测流是否被压缩的最佳方法

    找出我的最佳方法是什么java io InputStream包含压缩数据 介绍 由于所有答案都是 5 年前的 我觉得有责任写下今天发生的事情 我严重怀疑是否应该读取流的魔术字节 这是一个低级代码 通常应该避免 简单回答 米库写道 如果可以通
  • Python 替换未知结构 JSON 文件中的值

    假设我有一个 JSON 文件 其结构要么未知 要么可能会随着时间的推移而改变 我想用我在 Python 中选择的字符串替换 REPLACE ME 的所有值 我发现的一切都假设我知道其结构 例如 我可以读取 JSONjson load遍历字典
  • 在插入符中访问 rfe 生成的所有模型

    我正在使用rfecaret 包中的函数用于逻辑回归模型的特征选择 我正在看sizes5 10 15 20 和 25 使用 Rsquared 选择最佳模型 我的因变量是 0 1 有没有办法访问该公司生产的其他模型rfe功能超出最终选定的模型
  • 使用桌面应用程序部署 SQL Server Express 数据库?

    我已经在 NET 中创建了第一个基于数据库的桌面应用程序 但无法理解如何使用应用程序安装程序部署数据库 以便一次性安装数据库 应用程序和 SQL Server 如果我只使用安装程序部署 SQL Server 的本机客户端和数据库 它会起作用
  • mysql查询结果在php变量中

    有没有办法将mysql结果存储在php变量中 谢谢 query SELECT username userid FROM user WHERE username admin result conn gt query query 然后我想打印从
  • 如何在 Django 中制作类似于 stackoverflow 的 URL?

    我正在创建一个视频网站 我希望视频的直接网址看起来像 example com watch this is a slug 1 其中 1 是视频 ID 但我不想让蛞蝓变得重要 example com watch this is another
  • MVVM 独特的优势

    stackoverflow 搜索将导致多个包含相似标题的帖子 但这是不同的问题 由于这不是一个讨论网站 我必须问一个不同的问题 使用 MVVM 可以给我带来哪些其他实现无法带来的独特好处 MVC NTiers 或其他任何东西 我并不是真正在
  • C# 如何将 System.Net.ConnectStream 转换为 byte[] (数组)

    我正在尝试将流 System Net ConnectStream 转换为字节数组 关于如何做到这一点的任何想法 示例 Stream sourceStream the ConnectStream byte array using var ms
  • 如何在 REST Assured 中设置请求超时?

    我正在发送带有 REST Assured 的帖子请求 问题是它根本没有超时 就我而言 服务器有时无法访问 这会永远锁定请求 找到了答案 我将其发布在这里 希望对某人有所帮助 RestAssured config RestAssuredCon
  • 用颜色绘制 SKPhysicsBody 的形状

    使用 SpriteKit 创建游戏 效果非常好 我正在使用物理学并且能够看到我的身体实际上在哪里 因为我的精灵里面可能有一些阿尔法 这真的会很有帮助 这也将有助于创建更精确的身体 在 SpriteKit 的文档中 他们讨论了 debugOv
  • 如何将 .Net 日期时间转换为 T-SQL 日期时间

    MyDataSource SelectParameters startDate DefaultValue fromDate SelectedDate Date ToString 如您所见 我正在 Net SqlDataSource 中设置参
  • 从自定义中间件(外部身份提供商)重定向期间未传递登录 ID

    我们希望在身份服务器中有一个外部身份提供商 用户被重定向到登录到此外部身份提供商 Idp 并在那里完成身份验证 外部 Idp 将响应重定向回我们的身份服务器 我们希望在其中根据响应形成用户声明并重定向回调用客户端 我们遵循了答案这个计算器问
  • Oracle 多次更新查询

    我的数据库中有两张如下表所示的表 在每个 DEPARTMENT CODE 的第一个表 ITEM 中 将有多个 ITEM CODE ITEM STORE CODE ITEM CODE DEPARTMENT CODE 011 912003 14