【问题标题】:JOOQ: update two tables with one2one relationJOOQ:使用 one2one 关系更新两个表
【发布时间】:2021-07-13 15:41:59
【问题描述】:

我有 2 个具有 1:(0 或 1) 关系的表 例如:

table1 - 学生

id last_name first_name
1 Hart John

table2 - 学生地址

id student_id address is_married
1 1 something true

不是每个学生都有地址(例如)

我想更新两个表,更新学生,如果学生地址中存在相关行 - 还要更新学生地址。 是否可以在 JOOQ 的一个查询中完成?

【问题讨论】:

    标签: mysql sql jooq


    【解决方案1】:

    在 MySQL 中,您可以使用 JOIN 在单个语句中更新多个表:

    create table a (i int primary key, j int);
    create table b (i int references a, k int);
    
    insert into a values (1, 1);
    insert into b values (1, 1);
    update a join b using (i) set j = 2, k = 2;
    select * from a join b using (i);
    

    导致

    |i  |j  |k  |
    |---|---|---|
    |1  |2  |2  |
    

    从 jOOQ 的角度来看,这并没有什么特别之处。直接翻译成jOOQ就好了:

    ctx.update(A.join(B).using(A.I))
       .set(A.J, 2)
       .set(B.K, 2)
       .execute();
    

    【讨论】: