我是这样做的:
UPDATE products
SET products_image = (SELECT products_image
FROM products
WHERE products_id = 2)
WHERE products_id = 3;
Run Code Online (Sandbox Code Playgroud)
...但是得到一个错误:
错误1093(HY000):您无法在FROM子句中为更新指定目标表'products'
我有以下查询
UPDATE rec_analyst
SET analyst_name = (SELECT DISTINCT min (LIQA_ANALYST_LAST_NAME)
FROM LIQA
WHERE LIQA_ANALYST_ID = analyst_extern_id
AND LIQA_TS_INSERT = '15.09.2011'
)
WHERE analyst_provider_id = 4
Run Code Online (Sandbox Code Playgroud)
解释计划显示大约4000的成本,但数据库负载是100%,甚至一小时后这个工作还没有准备好.这里解释计划输出:
------------------------------------------------------------------------------------
DESC |OBJECT NAME |COST| # |BYTES |
------------------------------------------------------------------------------------
UPDATE STATEMENT, GOAL =ALL_ROWS| | 34| 16572| 331440|
-------------------------------------------------------------------------------------
UPDATE |REC_ANALYST | | | |
-------------------------------------------------------------------------------------
TABLE ACCESS FULL |REC_ANALYST | 34| 16572|331440 |
-------------------------------------------------------------------------------------
SORT AGGREGATE | | | |24 |
-------------------------------------------------------------------------------------
TABLE ACCESS FULL |REC_LIQA_LOAD_INQUIRY_ANALYST |3965|1 |24 |
-------------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我该如何优化它?
我有一个声明,需要编写(使用通用名称,因为这是为了工作)来更新表'tUpd'中的列'updCol'.tUpd还有一个列'linkCol',它存在于另一个表中.还有另一栏'idCol'.
我的问题是更新tUpd中行的updCol值,这些行通过linkCol对应于具有给定idCol值的行.
我认为应该解决的一个解决方案如下:
update
tUpd
set
updCol = XXX
where exists (
select
idCol
from
tOther
where
tOther.linkCol = tUpd.linkCol
and tOther.idCol = MY_ID
)
Run Code Online (Sandbox Code Playgroud)
但是,我担心这种方法会导致性能不佳,因为我之前已经警告过与性能相关的子查询 - 这个子查询将为tUpd的每一行运行一次,这是正确的吗?
有人有更好的建议吗?
重要更新:我的工作场所不惜一切代价避免使用SQL JOIN,而更喜欢在where子句中使用,例如,where a.col = b.col.这可能相当尴尬,但允许我特别是日志记录的灵活性,我不完全理解.所以,我正在寻找非JOIN使用的解决方案:)
是否可以使用我现有的INSERT代码并让它执行相同的操作但更新?
示例是:
ID | formTitle1 | formTitle2 | formTitle3 | formTitle4
-------------------------------------------------------
20 | The Rock | Booker | The Vine | Keys
Run Code Online (Sandbox Code Playgroud)
如果我想更新所有4行,那么我想我可以这样做吗?:
sql = "UPDATE formSettings " & _
"SET (formTitle1, formTitle2, formTitle3, formTitle4) " & _
"VALUES (@formTitle1, @formTitle2, @formTitle3, @formTitle4) " & _
"WHERE ID = '" & theID & "'"
Dim updateCmd As New SqlCommand(sql, myCONN)
updateCmd.Parameters.Add("@formTitle1", SqlDbType.VarChar)
updateCmd.Parameters.Add("@formTitle2", SqlDbType.VarChar)
updateCmd.Parameters.Add("@formTitle3", SqlDbType.VarChar)
updateCmd.Parameters.Add("@formTitle4", SqlDbType.VarChar)
updateCmd.Parameters("@formTitle1").Value = "changed1"
updateCmd.Parameters("@formTitle2").Value = "changed2"
updateCmd.Parameters("@formTitle3").Value …Run Code Online (Sandbox Code Playgroud) 我创建了一个存储过程,它有两个语句insert和update.
它有两个参数:
@content as nvarchar(10),
@fieldName as int
Run Code Online (Sandbox Code Playgroud)
在Update线路一切正常,但它不会插入到表.语法和一切都是真的,但是当我执行时
Execute sp_update 432,4
Run Code Online (Sandbox Code Playgroud)
SQL Server显示此错误:
消息207,级别16,状态1,行1
无效的列名称"up".
消息207,级别16,状态1,行1
无效的列名称"Field3".
这是我的脚本:
ALTER procedure [dbo].[sp_update]
@content as nvarchar(10),
@fieldName as int
as
declare @ff as varchar
set @ff = Convert(varchar,@fieldName)
declare @f as char(7)
set @f = 'Field'+ @ff
declare @sqlupdate varchar(500)
declare @sqlinserttoChangelog varchar(500)
set @sqlinserttoChangelog = 'Insert Into dbo.changelog (changeType, fieldname) Values ('+'up'+','+@f+')'
Exec (@sqlinserttoChangelog)
set @sqlupdate = 'update TableTest set ' + @f + …Run Code Online (Sandbox Code Playgroud) 我有一个包含50M记录的表,我必须更新几乎所有记录.我想在表上使用并行更新.哪个会更快,有没有索引?
我想在AngularJS上创建一个表单来编辑通过REST API访问的数据库行.我没有访问数据的问题,我真正遇到的问题是配置表单进行编辑.我如何能够显示数据,如果用户单击提交按钮,则能够更新数据.下面是我的Angular代码.
countryApp.controller('EditLocation', function($scope, $http, $routeParams, $location) {
//get the item information
var id = $routeParams.locid;
$scope.activePath = null;
$http.get('http://localhost/slimtest2/location/'+id).success(function(data) {
$scope.location = data;
});
$scope.editrel = function() {
var editData = {
location_title : $scope.l.location_title,
location_latitude : $scope.l.location_latitude,
location_longitude : $scope.l.location_longitude
}
//convert data to JSON string
var loce = JSON.stringify(editData);
$http.put('http://localhost/slimtest2/location/edit', loce);
}
$scope.reset = function() {
$scope.location = data;
}
});
Run Code Online (Sandbox Code Playgroud)
HTML - 编辑表单
<div ng-controller="EditLocation">
<form name="editform" ng-submit="editrel()">
<div ng-repeat="l in location.location">
<label for="location_title">Location Title</label>
<input …Run Code Online (Sandbox Code Playgroud) 我有一个国家表,其中有一列Countryid我意外删除了CountryId哪个Had值= 1,现在在州表中有一个列countryId = 1的值,用于根据国家ID获取记录(状态).我再次插入国家但它有不同的ID,所以如何在CountryId的国家表中再次更新该值,主键从2到
更新我的表时出现此错误
UPDATE "Username"."EMPPROJECT"
SET ENDDATE = TO_DATE('2016-09-11 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE ROWID = 'AAF+8XAAEAAGBIGAAB'
AND ORA_ROWSCN = '537035617'
Run Code Online (Sandbox Code Playgroud)
保存对表"Username"的更改时出错."EMPPROJECT":第8行:
ORA-04091:表Username.EMPPROJECT正在变异,触发器/函数可能看不到它ORA-06512:在"Username.CHECKOVERLAPDATEUPDATE",第4行
ORA-04088 :执行触发器'Username.CHECKOVERLAPDATEUPDATE'时出错
触发器的定义如下:
create or replace trigger checkOverlapDateUpdate
before Update on EmpProject
for each row
declare
countOfOverlap integer;
begin
select count(*)
into countOfOverlap
from EmpProject EP
where isOverlapping(:new.startDate, :new.endDate, startDate, endDate) = 1
and EP.EmpID = :new.EmpId;
if countOfOverlap > 0
then
RAISE_APPLICATION_ERROR(-00000, 'Overlapping Insertion Dates');
rollback;
end if;
end;
Run Code Online (Sandbox Code Playgroud) 我有下表lc:
a b c d
co NA co 1
co NA co 84
us co us 6
NA co NA 54
us NA NA 4
Run Code Online (Sandbox Code Playgroud)
还有另一张桌子 ro
d value
bb 1
co 0.5
mn 0.03
us 2
Run Code Online (Sandbox Code Playgroud)
我想lc使用中的值更新其中的值ro以获取以下内容:
a b c d
0.5 NA 0.5 1
0.5 NA 0.5 84
2 0.5 2 6
NA 0.5 NA 54
2 NA NA 4
Run Code Online (Sandbox Code Playgroud)
我有代码:
lc <- sqldf(c("UPDATE lc SET a = (SELECT ro.value FROM ro …Run Code Online (Sandbox Code Playgroud) sql-update ×10
sql ×6
sql-server ×4
oracle ×3
angularjs ×1
informix ×1
javascript ×1
json ×1
mysql ×1
oracle11g ×1
performance ×1
plsql ×1
primary-key ×1
r ×1
sql-insert ×1
sqldf ×1
vb.net ×1