我有一个选择查询,它执行一些文本操作,基本上重新格式化一个字段,以便我可以在另一个表中查找它:
如果我有第一个表,如果我有一个像"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) 哪个是更新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个案例?!
我在PostgresQL中有一个非常大的数据库表和一个像"复制"的列.每个新行开始都是未复制的,稍后将通过后台程序复制到另一个东西.该表上有一个部分索引"btree(ID)WHERE replicated = 0".后台程序最多选择2000个条目(LIMIT 2000),对它们起作用,然后使用2000个准备好的sql-commands在一个事务中提交更改.
现在的问题是我想给用户一个重置这个复制值的选项,让它再次为零.
更新表集已复制= 0;
不可能:
在这种情况下,我实际上不需要事务功能:如果系统发生故障,它将只处理部分事务.
其他几个问题:做一个
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来更新我的数据库中的属性列表:
update my_table set a = ?, b = ?, c = ?, d = ?, where customer = ?
Run Code Online (Sandbox Code Playgroud)
但是我想要仅在数据库中没有值的情况下更新具有新值的属性.我怎样才能做到这一点?
是否可以获取字段的当前值,将其用作计算中的变量,然后根据结果更新字段?
例如,table1中ID为"1"的记录的值为"2"
SELECT table1
WHERE ID = "1"
SET RESULT to CurrentID
RESULT = CurrentID + 1;
Run Code Online (Sandbox Code Playgroud) 我理解如何使用该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包装器而不是相对丑陋的子查询?如果是这样,为什么?
我想通过修剪所有前导和尾随空格来更新表中的所有值.我尝试了以下查询,但都没有奏效.
我知道可以将TRIM与SELECT一起使用,但是如何在UPDATE中使用它?
UPDATES teams SET name = TRIM(name)
UPDATES teams SET name = TRIM(LEADING ' ' TRAILING ' ' FROM name)
Run Code Online (Sandbox Code Playgroud) 我知道这听起来是一个愚蠢的问题,但我想知道是否update可以在没有where条款的情况下使用查询.如果是这样的话.
提前致谢.
如何更新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)
提前致谢.
我的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) sql-update ×10
sql ×8
mysql ×5
database ×2
postgresql ×2
json ×1
ms-access ×1
mvcc ×1
null ×1
php ×1
trim ×1
where-clause ×1