MySQL - 基于 SELECT 查询的 UPDATE 查询

时间:2023-04-02
本文介绍了MySQL - 基于 SELECT 查询的 UPDATE 查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我需要检查(从同一张表中)基于日期-时间的两个事件之间是否存在关联.

I need to check (from the same table) if there is an association between two events based on date-time.

一组数据将包含某些事件的结束日期时间,另一组数据将包含其他事件的开始日期时间.

One set of data will contain the ending date-time of certain events and the other set of data will contain the starting date-time for other events.

如果第一个事件在第二个事件之前完成,那么我想将它们链接起来.

If the first event completes before the second event then I would like to link them up.

到目前为止我所拥有的是:

What I have so far is:

SELECT name as name_A, date-time as end_DTS, id as id_A 
FROM tableA WHERE criteria = 1


SELECT name as name_B, date-time as start_DTS, id as id_B 
FROM tableA WHERE criteria = 2

然后我加入他们:

SELECT name_A, name_B, id_A, id_B, 
if(start_DTS > end_DTS,'VALID','') as validation_check
FROM tableA
LEFT JOIN tableB ON name_A = name_B

然后,我可以根据我的validation_check 字段运行带有 SELECT 嵌套的 UPDATE 查询吗?

Can I then, based on my validation_check field, run a UPDATE query with the SELECT nested?

推荐答案

您实际上可以通过以下两种方式之一执行此操作:

You can actually do this one of two ways:

MySQL 更新连接语法:

MySQL update join syntax:

UPDATE tableA a
INNER JOIN tableB b ON a.name_a = b.name_b
SET validation_check = if(start_dts > end_dts, 'VALID', '')
-- where clause can go here

ANSI SQL 语法:

ANSI SQL syntax:

UPDATE tableA SET validation_check = 
    (SELECT if(start_DTS > end_DTS, 'VALID', '') AS validation_check
        FROM tableA
        INNER JOIN tableB ON name_A = name_B
        WHERE id_A = tableA.id_A)

选择你认为最自然的那个.

Pick whichever one seems most natural to you.

这篇关于MySQL - 基于 SELECT 查询的 UPDATE 查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:在 MySQL 中查找重复记录 下一篇:如何将整个 MySQL 数据库字符集和排序规则转换为 UTF-8?

相关文章