【问题标题】:Merge two table based on column on the table in java MYSQL基于java MYSQL中表上的列合并两个表
【发布时间】:2021-07-18 05:13:38
【问题描述】:

嘿嘿,想请教一下java和MYSQL的问题。

例如我有两张表,分别是部门和职责:

1.部门:

Dept_id exp_id
dept_1 exp_1
dept_2 exp_1
dept_1 exp_2
dept_2 exp_2
  1. 职责:
Duty_id exp_id
duty_1 exp_1
duty_2 exp_1
duty_3 exp_1
duty_4 exp_2
duty_5 exp_2
duty_6 exp_2
duty_7 exp_2

我需要合并这两个表,不重复,平均分配。之后,我需要将数据插入到名为 result 的新表中。这两个表的外键是exp_id。

结果表:

Duty_id Dept_id
duty_1 dept_1
duty_2 dept_2
duty_3 dept_1
duty_4 dept_1
duty_5 dept_2
duty_6 dept_1
duty_7 dept_2

【问题讨论】:

  • 为什么职责 4 会与部门 1 相关联?您的数据和您的问题一样令人困惑。
  • 更好地格式化您的示例数据会改善这个问题。
  • 对不起,我的错..我已经使用 SQL 表更改了问题。我认为使用这种格式更容易理解。

标签: java sql arrays arraylist


【解决方案1】:

exp_id 和匹配位置中的 Row_number 项

select du.duty_id, dp.Dept_id
from (
   select Dept_id, exp_id, row_number() over(partition by exp_id order by Dept_id) rn , count(Dept_id) over(partition by exp_id ) cnt
   from Department
   ) dp
join (
   select Duty_id, exp_id,  row_number() over(partition by exp_id order by Duty_id) rn
   from Duty
   ) du 
   on dp.exp_id = du.exp_id and (du.rn - 1) % dp.cnt  + 1 = dp.rn
order by du.duty_id;

db<>fiddle

【讨论】:

  • 我有一个问题,如果这个查询在 MySQL 中是正确的?我尝试在 MySQL 的查询选项卡上运行,但是,第 3 行似乎出现 SQL 错误。
  • 它在 MySql 8.0 中运行正常,见小提琴。
【解决方案2】:

你猜,结果表已经用适当的数据类型创建了。您需要使用一些 SQL 查询,如下所示:

INSERT INTO RESULT(Duty_id, Dept_id)
SELECT duty.Duty_id, dept.Dept_id FROM Department dept, Duty duty where dept.exp_id=duty.exp_id;

【讨论】:

    猜你喜欢
    • 2021-06-26
    • 2011-12-20
    • 2018-03-15
    • 2021-03-04
    • 2021-07-02
    • 2016-12-08
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多