标签: sql-update

MS Access中的SQL更新困难 - 操作必须使用可更新的查询

我有一个选择查询,它执行一些文本操作,基本上重新格式化一个字段,以便我可以在另一个表中查找它:

如果我有第一个表,如果我有一个像"J1/2"这样的字段,它会在相应字段中查找J1和J2的不同表中记录的ID.

这一切都运作良好.

现在我想更新原始表,所以我不必再使用这个字符串操作进行查找,但是我对更新查询的尝试以"操作必须使用可更新的查询"结束

有任何想法吗?

我的SELECT语句:

SELECT DISTINCT
t1.DD,
t1.TN,
t1.DD & " J" & MID(t1.TN,2,1) AS CalculatedStart,
t1.DD & " J" & MID(t1.TN,4,1) AS CalculatedEnd,
t2.ID
FROM t1 INNER JOIN t2
ON (t1.DD & " J" & MID(t1.TN,2,1)=t2.StartLink)
AND (t1.DD & " J" & MID(t1.TN,4,1)=t2.EndLink)
WHERE t1.TN Like "J?/?"
AND t1.DD Like "M*";
Run Code Online (Sandbox Code Playgroud)

回想一下 - 这很好,我从另一端得到了必要的t2.ID.

所以我想做一些事情:

UPDATE t1 SET t2ID = (
    SELECT Query1.ID
    FROM Query1
    WHERE t1.DD=Query1.DD
    AND t1.TN=Query1.TN
    )
WHERE t1.TN Like "J?/?"
AND t1.DD Like …
Run Code Online (Sandbox Code Playgroud)

sql ms-access sql-update

15
推荐指数
4
解决办法
7万
查看次数

从SET字段中删除值的最佳方法是什么?

哪个是更新mysql SET字段的最佳方法,从字段中删除特定值.

例如.字段类别的值:1,2,3,4,5?我想从列表中删除'2':

UPDATE table 
SET categories = REPLACE(categories, ',2,', ',') 
WHERE field LIKE '%,2,%';
Run Code Online (Sandbox Code Playgroud)

但是,如果'2'是列表中的第一个或最后一个值,该怎么办?

UPDATE table 
SET categories = REPLACE(categories, '2,', '') 
WHERE field LIKE '2,%';

UPDATE table 
SET categories = REPLACE(categories, ',2', '') 
WHERE field LIKE ',2%';
Run Code Online (Sandbox Code Playgroud)

如何通过一个查询处理所有3个案例?!

mysql sql sql-update

15
推荐指数
3
解决办法
1万
查看次数

有效地更新非常大的PostgreSQL数据库表

我在PostgresQL中有一个非常大的数据库表和一个像"复制"的列.每个新行开始都是未复制的,稍后将通过后台程序复制到另一个东西.该表上有一个部分索引"btree(ID)WHERE replicated = 0".后台程序最多选择2000个条目(LIMIT 2000),对它们起作用,然后使用2000个准备好的sql-commands在一个事务中提交更改.

现在的问题是我想给用户一个重置这个复制值的选项,让它再次为零.

更新表集已复制= 0;

不可能:

  • 这需要很长时间
  • 由于MVCC,它重复了表格的大小
  • 它在一个事务中完成:它要么失败要么经过.

在这种情况下,我实际上不需要事务功能:如果系统发生故障,它将只处理部分事务.

其他几个问题:做一个

update set replicated=0 where id >10000 and id<20000
Run Code Online (Sandbox Code Playgroud)

同样糟糕的是:它在整个表格上执行顺序扫描,这太慢了.如果它没有这样做,它仍然会很慢,因为这将是太多的寻求.

我真正需要的是一种遍历所有行,改变它们而不受大型事务约束的方法.

奇怪的是,一个

UPDATE table 
  SET replicated=0 
WHERE ID in (SELECT id from table WHERE replicated= LIMIT 10000)
Run Code Online (Sandbox Code Playgroud)

也很慢,虽然它应该是一件好事:按DISK顺序浏览表...

(注意,在那种情况下,还有一个覆盖这个的索引)

(像Mysql这样的更新LIMIT不适用于PostgresQL)

BTW:真正的问题更复杂,我们在谈论已经部署的嵌入式系统,因此远程架构更改很困难,但遗憾的是它可能是PostgresQL 7.4.

我正在谈论的行数例如是90000000.数据库的大小可以是几个千兆字节.

数据库本身只包含5个表,一个是非常大的表.但这不是一个糟糕的设计,因为这些嵌入式盒子只能运行一种实体,它不是ERP系统或类似的东西!

有任何想法吗?

sql database postgresql mvcc sql-update

14
推荐指数
1
解决办法
2万
查看次数

SQL UPDATE,但仅当旧值为null时

我一直在使用这样的SQL来更新我的数据库中的属性列表:

update my_table set a = ?, b = ?, c = ?, d = ?,  where customer = ?
Run Code Online (Sandbox Code Playgroud)

但是我想要仅在数据库中没有值的情况下更新具有新值的属性.我怎样才能做到这一点?

sql null sql-update

14
推荐指数
3
解决办法
2万
查看次数

如何根据MySQL中的当前值更新字段?

是否可以获取字段的当前值,将其用作计算中的变量,然后根据结果更新字段?

例如,table1中ID为"1"的记录的值为"2"

SELECT table1
WHERE ID = "1"
SET RESULT to CurrentID
RESULT = CurrentID + 1;
Run Code Online (Sandbox Code Playgroud)

mysql sql sql-update

14
推荐指数
2
解决办法
2万
查看次数

有关在SQL中使用WITH子句的指导

我理解如何使用该WITH子句进行递归查询(!!),但我在理解它的一般用途/能力方面遇到了问题.

例如,以下查询更新一条记录,其id通过使用子查询确定,该子查询按时间戳返回第一条记录的id:

update global.prospect psp
set    status=status||'*'
where  psp.psp_id=(
           select  p2.psp_id
           from    global.prospect p2
           where   p2.status='new' or p2.status='reset'
           order   by p2.request_ts
           limit   1 )
returning psp.*;
Run Code Online (Sandbox Code Playgroud)

这是否适合使用WITH包装器而不是相对丑陋的子查询?如果是这样,为什么?

sql postgresql common-table-expression sql-update

14
推荐指数
2
解决办法
2万
查看次数

从MySQL表中的值修剪空格

我想通过修剪所有前导和尾随空格来更新表中的所有值.我尝试了以下查询,但都没有奏效.

我知道可以将TRIM与SELECT一起使用,但是如何在UPDATE中使用它?

UPDATES teams SET name = TRIM(name)
UPDATES teams SET name = TRIM(LEADING ' ' TRAILING ' ' FROM name)
Run Code Online (Sandbox Code Playgroud)

mysql sql trim sql-update

14
推荐指数
3
解决办法
3万
查看次数

没有WHERE子句的UPDATE查询

我知道这听起来是一个愚蠢的问题,但我想知道是否update可以在没有where条款的情况下使用查询.如果是这样的话.

提前致谢.

database where-clause sql-update

14
推荐指数
1
解决办法
3万
查看次数

使用WHERE子句的多个表的MySQL UPDATE语法

案件:

如何更新table1数据来自table2何处id

问题:

当我运行以下更新语句时,它会更新所有记录table1(即使其中的id字段table1不存在table2).

我如何使用的多个更新表语法中,只更新记录table1只有在id存在于table2和平等的吗?

UPDATE table1,table2
SET table1.value=table2.value 
WHERE table2.id=table1.id
Run Code Online (Sandbox Code Playgroud)

提前致谢.

mysql sql sql-update

14
推荐指数
1
解决办法
5万
查看次数

修改表列中存储的JSON字符串的属性值

我的JSON字符串存储在我的数据库列中.我必须在JSON字符串中更新该值.

这是我的桌子. 我的表像

我想更新state它里面的值.

例:

Name1有状态值KA所以我想将其更新为GJ.

到目前为止我尝试了什么?

UPDATE Customer
SET Detail = JSON_MODIFY(Detail , '$.Address.State', 'KA')
WHERE Name = 'name1';
Run Code Online (Sandbox Code Playgroud)

也试过JSON_REPLACE也行不通.

但它显示错误:

功能Customer.JSON_MODIFY 存在

注意:我知道一种解决方法,但我不想获取该字符串并完全更新它.我想更新字符串中的特定细节.

我也创建了SQL Fiddle.

我在localhost上这样做.以下是localhost详细信息.

Database server     
Server: localhost (localhost via TCP/IP)
Software: MySQL
MySQL Version :5.5.24

phpMyAdmin
Version information: 3.5.1, latest stable version: 4.7.3
Run Code Online (Sandbox Code Playgroud)

php mysql json sql-update

14
推荐指数
2
解决办法
2023
查看次数