MySQL - 基于SELECT查询的UPDATE查询

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

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

如果第一个事件在第二个事件之前完成,那么我想把它们联系起来。

到目前为止,我所拥有的是。

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查询吗?

对该问题的评论 (1)
解决办法

实际上,你可以用两种方法之一来做这件事。

MySQL更新连接语法。

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 语法。

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)

选择你认为最自然的一种。

评论(8)
UPDATE
    `table1` AS `dest`,
    (
        SELECT
            *
        FROM
            `table2`
        WHERE
            `id` = x
    ) AS `src`
SET
    `dest`.`col1` = `src`.`col1`
WHERE
    `dest`.`id` = x
;

希望这对你有用。

评论(3)

在MySQL中很容易。

UPDATE users AS U1, users AS U2 
SET U1.name_one = U2.name_colX
WHERE U2.user_id = U1.user_id
评论(0)

如果有人想把数据从一个数据库更新到另一个数据库,无论他们的目标是哪张表,都必须有一些标准来做到这一点。

这个是比较好的,对所有级别的人来说都很干净。

UPDATE dbname1.content targetTable

LEFT JOIN dbname2.someothertable sourceTable ON
    targetTable.compare_field= sourceTable.compare_field
SET
    targetTable.col1  = sourceTable.cola,
    targetTable.col2 = sourceTable.colb, 
    targetTable.col3 = sourceTable.colc, 
    targetTable.col4 = sourceTable.cold 

Traaa!效果很好!

根据上述理解,你可以修改设置字段和"on"标准来完成你的工作。你也可以执行检查,然后将数据拉入临时表,然后使用上述语法替换你的表和列名来运行更新。

希望这有用,如果没有,请告诉我。我将为你写一个精确的查询。

评论(0)
UPDATE 
  receipt_invoices dest,
  (
    SELECT 
      `receipt_id`,
      CAST((net * 100) / 112 AS DECIMAL (11, 2)) witoutvat 
    FROM
      receipt 
    WHERE CAST((net * 100) / 112 AS DECIMAL (11, 2)) != total 
      AND vat_percentage = 12
  ) src 
SET
  dest.price = src.witoutvat,
  dest.amount = src.witoutvat 
WHERE col_tobefixed = 1 
  AND dest.`receipt_id` = src.receipt_id ;

希望这能帮助你在两个表之间进行匹配和更新的情况。

评论(0)

我在寻找一个非常复杂的连接问题的解决方案时发现了这个问题。 这是对一个更复杂版本的问题的另一种解决方案,我想可能会有用。

我需要在activity表中填充product_id字段,其中activity以单位为单位编号,单位以级别为单位编号(使用字符串??N来标识),这样就可以使用SKU即L1U1A1来标识activity。 这些SKU就被存储在不同的表中。

我确定了以下内容,以获得活动_id与产品_id的列表:-。

SELECT a.activity_id, w.product_id 
  FROM activities a 
  JOIN units USING(unit_id) 
  JOIN product_types USING(product_type_id) 
  JOIN web_products w 
    ON sku=CONCAT('L',SUBSTR(product_type_code,3), 'U',unit_index, 'A',activity_index)

我发现这太复杂了,无法纳入到mysql的SELECT中,所以我创建了一个临时表,并将其与update语句连接在一起:-。

CREATE TEMPORARY TABLE activity_product_ids AS ();

UPDATE activities a
  JOIN activity_product_ids b
    ON a.activity_id=b.activity_id 
  SET a.product_id=b.product_id;

我希望有人觉得这个有用

评论(1)
UPDATE [table_name] AS T1,
      (SELECT [column_name] 
        FROM [table_name] 
        WHERE [column_name] = [value]) AS T2 
  SET T1.[column_name]=T2.[column_name] + 1
WHERE T1.[column_name] = [value];
评论(0)

你可以使用内部连接更新另一个表的值,就像这样。

UPDATE [table1_name] AS t1 INNER JOIN [table2_name] AS t2 ON t1.column1_name] = t2.[column1_name] SET t1.[column2_name] = t2.column2_name];

下面跟着小编一起来了解一下这个查询方法吧[http://www.voidtricks.com/mysql-inner-join-update/][1]。

或者你可以使用select作为子查询来完成这个任务。

UPDATE [table_name] SET [column_name] = (SELECT [column_name] FROM [table_name] WHERE [column_name] = [value]) WHERE [column_name] = [value];

查询的详细解释在这里 [http://www.voidtricks.com/mysql-update-from-select/][2]

[1]: http://www.voidtricks.com/mysql-inner-join-update/ [2]: http://www.voidtricks.com/mysql-update-from-select/

评论(0)

你可以使用。

UPDATE Station AS st1, StationOld AS st2
   SET st1.already_used = 1
 WHERE st1.code = st2.code
评论(0)

对于同一表格:

UPDATE PHA_BILL_SEGMENT AS PHA,
     (SELECT BILL_ID, COUNT(REGISTRATION_NUMBER) AS REG 
       FROM PHA_BILL_SEGMENT
        GROUP BY REGISTRATION_NUMBER, BILL_DATE, BILL_AMOUNT
        HAVING REG > 1) T
    SET PHA.BILL_DATE = PHA.BILL_DATE + 2
 WHERE PHA.BILL_ID = T.BILL_ID;
评论(0)

我有一个问题,一个表本身有重复的条目。 下面是对我有用的方法。 也得到了@sibaz的提倡。

最后我用下面的查询解决了。

  1. 选择查询保存在一个临时表中

IF OBJECT_ID(N'tempdb.#New_format_donor_temp', N'U') IS NOT NULL。 DROP TABLE #New_format_donor_temp;

选择 * 进入#New_format_donor_temp。 来自捐助方_就业 其中 DONOR_ID IN ( 1, 2 )

-- 测试New_format_donor_temp; -- SELECT * -- FROM #New_format_donor_temp;

  1. 在更新查询中加入临时表。

UPDATE de SET STATUS_CD=de_new.STATUS_CD, STATUS_REASON_CD=de_new.STATUS_REASON_CD, TYPE_CD=de_new.TYPE_CD。 FROM DONOR_EMPLOYMENTS AS DE。 INNER JOIN #New_format_donor_temp AS de_new ON de_new.EMP_NO = de.EMP_NO。 在哪里 de.DONOR_ID IN ( 3, 4 )

我对SQL不是很有经验请教有什么更好的方法你知道吗。

以上查询是针对MySql服务器的。

评论(0)

用下面的查询检查。

更新表A A 内连接表B B on A.name_a = B.name_b set validation_check = if(start_dts > end_dts,'VALID','')

评论(0)