标签: sql-update

使用JOIN在SQL中进行UPDATE

我正在使用SQL Server 2008,并尝试在管理工作室中运行以下查询:

        UPDATE
        Table1 as T1 INNER JOIN Table2 as T2 ON T1.ID=T2.ID
        SET T1.SomeValue = T2.SomeValue

        GO
Run Code Online (Sandbox Code Playgroud)

虽然不起作用.是否支持这种事情?

卡尔

[编辑]让我更清楚,我不想做类似的事情:

        UPDATE
        Table1 as T1 INNER JOIN Table2 as T2 ON T1.ID=T2.ID
        SET T1.SomeValue = T2.SomeValue
        T1.SomeValue2 = T2.SomeValue2
        T1.SomeValue3 = T2.SomeValue3
        T1.SomeValue4 = T2.SomeValue4

        GO
Run Code Online (Sandbox Code Playgroud)

即无需显式执行T1.SomeValue = SELECT ...,T2.SomeValue = SELECT ...

sql join sql-update

1
推荐指数
1
解决办法
538
查看次数

使用有关先前行的计算更新SQL表

我正在尝试修复一个大型股票交易所数据库的错误.一列(数量)在每个刻度上具有交易量,而其他列存储累积量(即,当天的先前刻度的总和).在某些情况下,这第二列是错误的(不是很多,所以我们可以安全地假设相邻的刻度线没有错误).因此理论上修复很容易:只需搜索累积量减少的刻度(这就足够了),然后从最后一个刻度中选择累积量并将当前刻度的数量相加.问题是我一直在努力开始在oracle中执行此操作的查询,但由于我缺乏sql的专业知识,我正在努力.这是我到目前为止所获得的:

update
( 
    select m.cumulative_volume, q.cum_volume_ant, q.quantity from 
    market_data_intraday_trades m
    join
    (
          select * from
          (select
            product_key,
            sequence_number,
            lead(product_key) over (order by product_key, sequence_number) as product_key_ant,
            to_char(trade_date_time, 'yyyymmdd') as fecha,
            to_char(lag(trade_date_time) over (order by product_key, sequence_number), 'yyyymmdd') as fecha_ant,
            cumulative_volume,
            lead(cumulative_volume) over (order by product_key, sequence_number) as cum_volume_ant,
            cumulative_volume - lead(cumulative_volume) over (order by product_key, sequence_number) as dif 
          from market_data_intraday_trades)
          where product_key = product_key_ant
          and fecha = fecha_ant
          and dif < 0 
          and rownum < 10
    ) q
    on m.sequence_number …
Run Code Online (Sandbox Code Playgroud)

sql oracle join aggregate-functions sql-update

1
推荐指数
1
解决办法
3952
查看次数

CFLOOP和SQL Update

如何使用CFLOOP更新Access DB上的记录?我尝试使用下面的代码,但它似乎给了我一个重复的值而不是增量

我的代码:

<cfloop index="i" from="1" to="3">
<cfquery name="query" datasource="datasource">
    update mytable
    set
    columnB = #i#
    where columnA = 'a'                                          
   </cfquery>
</cfloop>
Run Code Online (Sandbox Code Playgroud)

columnB =所有数字3下的记录输出,应为1,2,3

我的桌子看起来像这样....

Column A|ColumnA1|ColumnB
A         A        
A         B
A         C
Run Code Online (Sandbox Code Playgroud)

列A和A1填充了先前的CFLOOP和SQL插入.

coldfusion ms-access sql-update cfloop

1
推荐指数
1
解决办法
213
查看次数

PDO更新多条记录

我知道之前已经问过这个问题并且我已经完成了许多答案,现在正在处理其中一个答案,但是需要一些帮助来处理以下代码.

<?php

$title = $_POST['title'];
$description = $_POST['description'];
$item_name = $_POST['item_name'];

$A = count($item_name);

include ("connection.php");

try {

    $set_details = "UPDATE images
                    SET title = :title,
                    description = :description,
                    WHERE item_name = :item_name";


$STH = $conn->prepare($set_details);

    $i = 0;
    while($i < $A) {
        $STH->bindParam(':title', $title[$i]);
        $STH->bindParam(':description', $description[$i]);
        $STH->bindParam(':item_name', $item_name[$i]);
        $STH->execute();
        $i++;
    }
}
catch(PDOException $e) {  
    echo "I'm sorry, but there was an error updating the database.";  
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}


?>
Run Code Online (Sandbox Code Playgroud)

执行时我没有错误,没有提交到mysql表,如果你发现了什么请告诉我,或者如果有更好的方法可以解决这个问题,你可以指点我一个教程,我没有多少工作PDO或多行更新.

提前致谢.

致山姆:

print_r($STH->errorInfo());
Run Code Online (Sandbox Code Playgroud)

输出是:

Array …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo sql-update

1
推荐指数
1
解决办法
5710
查看次数

更新查询以通过循环运行以更新许多行

我在处理SQL时很少使用update语句,这样做时会有点紧张.在之前的一期中,我提出了它,我决定在一些表中添加一个标识列作为代理键.考虑到170万行,我希望尽可能顺利地完成这项工作.所以我需要做的是运行一个循环更新并使用相关数据更新每个字段.

表1:tblPostCodeLookup

Postcode | Postcode ID
AB44     | 1
AB45     | 2
Run Code Online (Sandbox Code Playgroud)

表2:tblPostcodeStreetView

ID | Postcode | Postcode ID
1  | AB446TR  | 1
2  | AB447TY  | 1
3  | AB457HH  | 2
Run Code Online (Sandbox Code Playgroud)

我已经做了基本的更新

UPDATE    tblPostcodesStreetsView
SET              PostcodeID = 1
WHERE     (postcode LIKE 'AB44%')
Run Code Online (Sandbox Code Playgroud)

然而,让这个贯穿并更新每一个导致我的问题!

sql-server-2008 sql-update

1
推荐指数
1
解决办法
583
查看次数

SQLite更新ONE记录非常(相对)缓慢

在插入/更新许多行时,我知道SQLite的"问题",但事实并非如此.

我正在更新一行中的一个字段,由PK索引,在一个包含约250条记录的表中.查询总是需要大约200毫秒.这听起来很少,但它很大.

为什么1个非常简单的UPDATE查询需要200毫秒?所有阅读都非常快速.

我试过了:

  • BEGIN并且COMMIT- 没有变化,因为它只是一个声明
  • PRAGMA journal_mode=PERSIST - 没有变化,显然磁盘io不是问题?
  • 删除UPDATE语句 - 这对于时间来说非常有用!但它不是很持久

要在同一系统上与MySQL进行比较:在非常相似的数据库中为0.6ms.

我不需要事务安全性(ACID?)或任何你称之为.如果计算机在此查询期间崩溃,我可以丢失所有更改.MySQL(InnoDB)有一个选项:innodb_flush_log_at_trx_commit.SQLite有类似的东西吗?

我正在使用sqlite-3.7.9,如果这很重要的话.

sqlite sql-update

1
推荐指数
1
解决办法
4451
查看次数

使用另一个表中的列值填充MySQL中的列

我想在SQL中做一些我想象的非常基本的东西,但我似乎无法弄明白.

我有2张桌子:

省份 - >

 id                                  |   name     |  pCode |  country_id  | cCode
78840113-a0e5-11e4-8237-de7fe3f523cf |  Alabama   | AL     | 1228         |
7884030c-a0e5-11e4-8237-de7fe3f523cf |  Alaska    | AK     | 1228         |
788403ea-a0e5-11e4-8237-de7fe3f523cf |  Arizona   | AZ     | 1228         |
788404a2-a0e5-11e4-8237-de7fe3f523cf |  Arkansas  | AR     | 1228         |
Run Code Online (Sandbox Code Playgroud)

和国家 - >

iso_code  | name                   | country_id
AD        | Andorra                | 1005           
AE        | United Arab Emirates   | 1225           
AF        | Afghanistan            | 1001           
AG        | Antigua and Barbuda    | 1009          
Run Code Online (Sandbox Code Playgroud)

我只想让省份中的cCode列填充相应的iso_code(如果省份和国家/地区的country_id相同).

我已经尝试了很多东西,甚至没有在这里写我的代码,我甚至不知道哪个方向是正确的方法(加入,插入,更新??).我完全卡住了请帮助我!

mysql database join insert sql-update

1
推荐指数
1
解决办法
1823
查看次数

Oracle:如何更新表中的"过时"日期?

我们的用例:

对于表格USERS:

如果用户处于非活动状态(列)超过该分钟,则更新所有行('N'列的设置值ACTIVE).'LAST_VISIT'60

Google帮助我找到了如何获取db中的当前时间(我使用Oracle):

SELECT sysdate FROM dual;
Run Code Online (Sandbox Code Playgroud)

然后我找到了如何找到两个日期之间的分钟差异的方法:

SELECT(date1 - date2)*1440
Run Code Online (Sandbox Code Playgroud)

看起来有点难看......但还可以.

现在,我正在努力将所有这些结合在一起:

UPDATE USERS u 
SET ACTIVE='N' 
WHERE  SELECT((SELECT sysdate FROM dual) - u.LAST_VISIT)*1440 >60;
Run Code Online (Sandbox Code Playgroud)

能否请您查看我的最终查询.

好吗?或者,也许,可以优化它?

sql database oracle oracle11g sql-update

1
推荐指数
1
解决办法
59
查看次数

如果值不为NULL,如何更新列

TBL_Log如果从C#输入的值不是,我想更新表的任何列NULL.这是我的存储过程:

Alter PROCEDURE [dbo].[SP_Update_User] 
(@User_id as int,@User_Names as nvarchar(max),@End as char(8),@Start as nvarchar(max) ,@Count as int)

AS
BEGIN


UPDATE [dbo].[TBL_Log]


     SET User_Names = @User_Names
      ,[Start] = @start
      ,[End] = @End
      ,[Count] = @Count
      where User_id = @User_id



END
Run Code Online (Sandbox Code Playgroud)

我试图做这项工作,但没有成功.

D1类代码:

public static DataSet Update_User(int @User_id, string @User_Names, string @End, string @Start, int @Count)
    {

        SqlConnection myConnection = new SqlConnection(strConecctionString);


        SqlDataAdapter sqlcmd = new SqlDataAdapter("SP_Update_UserData_Bot", myConnection);
        sqlcmd.SelectCommand.CommandType = CommandType.StoredProcedure;


        SqlParameter parameterID_category_ID = new SqlParameter("@User_id", SqlDbType.Int);
        parameterID_category_ID.Value = User_id; …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server null sql-update

1
推荐指数
1
解决办法
1566
查看次数

如何根据其他表中的值编写UPDATE

我有一个关于MySQL中"更新"的问题.我有两张桌子table1并且table2已连接table1.id=table2.tab1.现在,我想table2根据值中的值更新值table1.我试图像这样做:

UPDATE table2 SET table2.val='new value' 
WHERE table1.id=table2.tab1 AND table1.val='xy' 
Run Code Online (Sandbox Code Playgroud)

换句话说,我想更改相应条目的值为'xy'的val所有条目的值.table2table1

不幸的是,这不起作用.有人能给我一个暗示吗?

mysql sql syntax join sql-update

1
推荐指数
1
解决办法
52
查看次数