如何在与 IF() 条件相同的条件后插入...在重复键更新 (MySQL) 上

问题描述

我正在实施这样一种情况:INSERT ...ON DUPLICATE KEY UPDATE 需要仅在满足 IF 条件后执行。 我对如何包含条件语句有疑问。 _没有这个 IF 条件,mysql 查询工作正常。我试过 WHERE 语句,但插入...重复键更新不支持 WHERE 语句。

请指导我解决这个问题

实现流程是这样的:

表1 PRIMARY KEY(SL_No,unique_address)

SL_No| Unique_Addres| hostname| Address|
1| 20211001|Peter Rick|   Ohio|
2| 20211011|     Rowan| London|
3| 20211019|      Lily|  Perth|

表2 主键(fk_id,unique_address) FOREIGN KEY (unique_address) REFERS table1(unique_address)

fk_id| Unique_Address| Check_in| Check_out|
20-10-01|  20211001|  15:00|  16:00|
20-12-12|  20211011|  09:39|   NULL|

具有唯一地址的新唯一条目,例如(fk_id,'KEY') 应该在验证'KEY'已经在table1中注册之后插入到table2中。否则,拒绝该条目并且不要将其输入到表 2 中。 验证后,

insert values('fk_id','KEY','value',null)(如果表2中不存在该条目) 或

update(?,?,value)(如果表 2 中已经存在该条目)。

例如

INSERT INTO table2('21-02-12','202111012','15:13',DEFAULT)
ON DUPLICATE KEY UPDATE `Check_out` = '15:13';
--This query above should not execute 
--because unique_address '202111012' is not in table1


#Pseudo query
SET @KEY = '20211011',@dat ='20-12-12',@tim = '18:10'
IF EXISTS(@KEY in (SELECT table1.unique_address FROM table1))
{
    INSERT INTO table2 (fk_id,unique_address,col1,col2)
    VALUES(@dat,@KEY,@tim,DEFAULT)
    ON DUPLICATE KEY UPDATE col2 = @tim;
}
ELSE
{
    RETURN;
  --do nothing or skip to next iteration( if inside a loop)
}

上面的伪查询应该更新 table2 的第二行,它应该是这样的:

fk_id| Unique_Address| Check_in| Check_out|
20-10-01|  20211001|  15:00|  16:00|
20-12-12|  20211011|  09:39|  18:10|

如何进行以获得所需的结果?使用 WHERE 子句还是 IF EXISTS() 子句并不重要,只要我得到了想要的结果。

编辑:-

我想出了一个可能的解决方案。

    INSERT IGNORE INTO `table2`(`fk_ID`,`Unique_Address`,`Check_in`,`Check_out`) 
    VALUES ( 
            '20-12-25',(SELECT table1.Unique_Address from table1 WHERE table1.Unique_Address = '20211089'),'15:19',DEFAULT) 
    on duplicate key UPDATE `Check_out` = '15:19';

我通过上面的查询得到了想要的结果。但在未注册的 unique_address 的情况下,输入了一个带有空的 Unique_Address 单元格的新行。像这样:

fk_id| Unique_Address| Check_in| Check_out|
20-10-01|  20211001|  15:00|  16:00|
20-12-12|  20211011|  09:39|  18:10|
20-12-13|          |  15:19|   NULL|

有没有其他有效的方法来做到这一点,以便没有这样的空单元格(空的 Unique_Address 单元格)?

提前致谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)