【问题标题】:Set column value of tableA to the id of tableB based on date (in tableB)根据日期将tableA的列值设置为表的id(在表中)
【发布时间】:2015-09-12 12:32:11
【问题描述】:

我有两张桌子。第一个表名为employeeinfo,如下所示:

______________________________________________________________________
| Id | FirstName | LastName | Hours | Rate | TotalCost | BatchDateId |
|____|___________|__________|_______|______|___________|_____________|
| 1  | John      | Smith    |  30   |  40  |   1200    |      ?      |
|____|___________|__________|_______|______|___________|_____________|
| 2  | Jane      | Doe      |  40   | 100  |   4000    |      ?      |
|____|___________|__________|_______|______|___________|_____________|

第二张表被称为batchdate,它看起来像这样:

___________________
| Id |    Date    |
|____|____________|
| 1  | 2015-06-25 |
|____|____________|

请注意第一个表(employeeinfo 表)中的 "?"。我的目标是能够将第二个表(batchdate 表)中的 BatchDateId 设置为日期(例如2015-06-25)。

但问题是,假设我明天再次运行查询,我希望它使用 batchdate 表中的新 Id 更新 BatchDateId(因为它将有一个新行一个新的Id 和一个新的Date)。

提前致谢!

编辑:到目前为止,我的陈述如下:

String employeeInfo = "INSERT INTO employeeinfo (FirstName, LastName, Hours, Rate, TotalCost, BatchDateId) "
                                + "(?, ?, ?, ?, ?, ?)"
                                + " ON DUPLICATE KEY UPDATE "
                                + "Hours=(?), Rate=(?), TotalCost=(?);";

还有:

String batchDate = "INSERT INTO batchdate (Date) VALUES " 
                + "(?)" 
                + " ON DUPLICATE KEY UPDATE " 
                + "Date=(?);";

EDIT2:所以我想做的是,假设我已经更新了 John Smith 的 Hours 和/或 Rate 在不同的日子(这也将改变 @ 987654340@),则 BatchDateId 应更改为包含新 Date 的新 Id。如果employeeinfo 中的现有行没有受到影响或这些行在同一天更新,则BatchDateId 保持不变;但是,如果有新行,那么它们应该有不同的BatchDateId(基于batchdate 表中的新行)。

【问题讨论】:

    标签: mysql join sql-update sql-insert


    【解决方案1】:

    如果我没记错的话,您可以在表格之间执行JOIN,这将获得匹配的Id,然后执行UPDATE 操作,如下所示

    update employeeinfo a
    join batchdate b on a.Id = b.Id
    set a.BatchDateId = b.Id;
    

    【讨论】:

    • 那么,它如何符合我目前的陈述?这就是我感到困惑的......就像我插入到batchdate 表,然后插入到employeeinfo 然后这样做(你说什么)?
    • 不,我的意思是直接对employeeinfo 表执行UPDATE。不需要 INSERT 语句。
    • 那么,我将如何插入所有其他需要的值?像FirstNameLastName.. 等。随着这次更新?
    • 现在我很困惑;根据您的帖子,这些字段确实已经有数据,并且您只想更新 batchId。所以这个答案正是指出了这一点。
    • 是的,抱歉,我试图展示一些关于它的外观的值。但这些值是从我的程序中插入的(请参阅我的声明)......无论哪种方式,如果你可以看看我的 EDIT2 OP也许可以消除混乱。
    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2017-06-12
    相关资源
    最近更新 更多