标签: sql-update

SQL MERGE语句中的UPDATE-no-op

我有一个表中包含一些持久性数据.现在,当我查询它时,我还有一个非常复杂的CTE,它计算结果所需的值,我需要将缺少的行插入到持久表中.最后,我想选择由CTE识别的所有行组成的结果,但是如果它们已经在表中,则使用表中的数据,并且我需要有关是否刚刚插入行的信息.

简化这样的工作原理(如果您想尝试以下代码作为普通查询运行):

-- Set-up of test data, this would be the persisted table 
DECLARE @target TABLE (id int NOT NULL PRIMARY KEY) ;
INSERT INTO @target (id) SELECT v.id FROM (VALUES (1), (2)) v(id);

-- START OF THE CODE IN QUESTION
-- The result table variable (will be several columns in the end)
DECLARE @result TABLE (id int NOT NULL, new bit NOT NULL) ;

WITH Source AS (
    -- Imagine a fairly expensive, recursive CTE here
    SELECT * FROM …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2008 sql-update sql-merge

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

MySQL/SQL:使用更新表本身的相关子查询进行更新

我有一个通用的问题,我将尝试使用一个例子来解释.

假设我有一个包含字段的表:"id","name","category","appearances"和"ratio"

我的想法是,我有几个项目,每个项目都与一个类别有关并且多次"出现".比率字段应包括每个项目出现的百分比,超出该类别中项目的总出现次数.

在伪代码中我需要的是以下内容:

  • 对于每个类别,
    查找与其相关的项目的外观总和.例如,它可以用(select sum("appearances") from table group by category)完成

  • 对于每个项目,
    将比率值设置为项目的外观除以上面类别的总和

现在,我正在尝试使用单个更新查询来实现此目的,但似乎无法做到这一点.我认为我应该做的是:

update Table T    
set T.ratio = T.appearances /   
(    
select sum(S.appearances)    
from Table S    
where S.id = T.id    
)
Run Code Online (Sandbox Code Playgroud)

但MySQL不接受更新列中的别名T,我没有找到实现此目的的其他方法.

有任何想法吗?

mysql sql correlated-subquery sql-update

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

android.database.sqlite.SQLiteDatabase.rawQuery()没有使用SQLite datetime()函数更新DATETIME列

public Cursor set_datetime_next(Reminder r) {       
    String _newVal = "datetime('now', '+7 days')";
    String[] args = { new Integer(r.getID()).toString() };
    String query =
        "UPDATE " + DBConst.TABLE
      + " SET "   + DBConst.f_DATETIME_NEXT + "=" + _newVal
      + " WHERE " + DBConst.f_ID +"=?";
    Log.i(TAG, query);
    return db.rawQuery(query, args);
}
Run Code Online (Sandbox Code Playgroud)

我也试过传入datetime('now', '+7 days')作为绑定参数,这将无法工作,因为Android文档说:

这些值将绑定为字符串.

参考文献:

sqlite android date sql-update

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

MySql一次更新两个表

我有两个表需要完全相同的值用于非规范化目的.

这是查询.

第一张桌子

UPDATE Table_One 
SET win = win+1, streak = streak+1, score = score+200 
WHERE userid = 1 AND lid = 1 LIMIT 1
Run Code Online (Sandbox Code Playgroud)

第二张桌子

UPDATE Table_Two 
SET win = win+1, streak = streak+1, score = score+200 
WHERE userid = 1 LIMIT 1
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,两个表之间的唯一区别是它们的名称和表两个没有该字段 lid

无论如何将两个更新组合成一个?

mysql sql-update

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

使用每个单独行的多个"where"子句更新多行

我想像这样更新我的表:

Update MyTable 
SET value     = 1 
WHERE game_id = 1,
      x       =-4,
      y       = 8

SET value     = 2 
WHERE game_id = 1,
      x       =-3,
      y       = 7

SET value     = 3 
WHERE game_id = 2,
      x       = 5,
      y       = 2
Run Code Online (Sandbox Code Playgroud)

我可以做一个foreach()但是会发送超过50个单独的查询,这非常慢.这就是我希望将它组合成一个大查询的原因.

(我确实为每一行使用了一个id,但game_id,xy的组合是我用来识别我需要的行的方法.)

这里描述的codeIgniter中的update_batch()函数: 使用CodeIgniter更新批处理 是有帮助的并且几乎完美但它只允许1个单个where子句,你不能(据我理解并尝试过)输入一个包含多个where子句的数组.

我也检查了这个问题: MYSQL UPDATE SET在同一列但有多个WHERE子句 但它只允许多行更新只包含一个不同的WHERE子句,我需要多个WHERE子句!:)

Anwsers可以使用简单的SQL,也可以使用php(和CodeIgniter)或以不同的方式使用.我想以任何可能的方式解决这个问题;)

我真的可以使用建议/帮助!= d

mysql sql sql-update

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

PHP UPDATE准备好的声明

嗨,我正在尝试学习使用预准备语句的正确方法,以避免SQL注入等.

当我执行脚本时,我从我的脚本中得到一条消息,说0行已插入,我希望这可以说1行插入,当然更新表.我对我准备好的陈述并不完全确定,因为我做了一些研究,我的意思是它因例子而异.

当我更新我的表时,我需要声明所有字段还是只更新一个字段?

任何信息都会非常有用.

的index.php

<div id="status"></div>

    <div id="maincontent">
    <?php //get data from database.
        require("classes/class.Scripts.inc");
        $insert = new Scripts();
        $insert->read();
        $insert->update();?>

       <form action="index2.php" enctype="multipart/form-data" method="post" name="update" id="update">
              <textarea name="content" id="content" class="detail" spellcheck="true" placeholder="Insert article here"></textarea>
        <input type="submit" id="update" name="update" value="update" />
    </div>
Run Code Online (Sandbox Code Playgroud)

类/ class.Scripts.inc

public function update() {
    if (isset($_POST['update'])) {
                    $stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
                    $id = 1;
                    /* Bind our params */                           
                    $stmt->bind_param('is', $id, $content);
                    /* Set our params */
                    $content = isset($_POST['content']) ? $this->mysqli->real_escape_string($_POST['content']) …
Run Code Online (Sandbox Code Playgroud)

php mysqli prepared-statement sql-update

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

SQL从另一个表中的另一列更新一列

我在此之前阅读了各种帖子.但它们似乎都不适合我.

正如标题所示,我正在尝试从另一个表中的列更新一列.我不记得以前有这个问题..

1.表:user_settings.contact_id,我想用contacts.id更新where (user_settings.account_id == contacts_account_id)

2.以前通过account_id将联系人链接到用户帐户.但是,现在我们要将联系人链接到user_settingsviacontacts.id

以下是我尝试过的一些例子,尽管它们都没有奏效.我会感兴趣的是A.)为什么他们不工作和B.)我该怎么办呢.

例A:

UPDATE user_settings
SET user_settings.contact_id = contacts.id 
FROM user_settings 
INNER JOIN contacts ON user_settings.account_id = contacts.account_id
Run Code Online (Sandbox Code Playgroud)

例B:

UPDATE (SELECT A.contact_id id1, B.id id2
  FROM user_settings A, contacts B
  WHERE user_settings.account_id = contacts.account_id)
SET id1 = id2
Run Code Online (Sandbox Code Playgroud)

例C:

UPDATE user_settings
SET user_settings.contact_id = (SELECT id
  FROM contacts
  WHERE (user_settings.account_id = contacts.account_id)
WHERE EXISTS ( user_settings.account_id = contacts.account_id )
Run Code Online (Sandbox Code Playgroud)

我觉得我的大脑只是关闭了我,并希望重新启动它的任何颠簸.谢谢 :)

mysql join sql-update

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

如何使用t-sql命令将数据更新为大写首字母?

我的数据库上有一张表.我的表名是"公司".我想将数据"company_name"更改为大写首字母.例如;

"ABC公司"

"DEF PLASTICITY"

"Abc公司"

"可塑性"

我知道我应该使用"UPDATE"命令.但是怎么样?谢谢你的帮助!

(CONCAT不起作用)

t-sql sql-server uppercase sql-update

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

SQL Server如何只更新数据库中的一行?

如何才能更新db上的一条记录?

表:

name       name1       name2
----------------------------
xx         xy          xz
xx         xx          xx
xx         xx          xx
xx         xx          xx
xy         xx          zz
Run Code Online (Sandbox Code Playgroud)

更新查询:

UPDATE table1 
SET name2 = '01' 
WHERE name1='xx'
Run Code Online (Sandbox Code Playgroud)

但我每次只需更新一行

sql database sql-server sql-update

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

MYSQL是否会在更新时覆盖相同值的列?

在mysql中更新表时,例如:

user

user_id | user_name

1         John
2         Joseph
3         Juan
Run Code Online (Sandbox Code Playgroud)

如果我运行查询

UPDATE `user` SET user_name = 'John' WHERE user_id = 1
Run Code Online (Sandbox Code Playgroud)

MYSQL会再次写入相同的值还是忽略它,因为它是相同的内容?


这是我提出的一个问答问题,因为Stack Overflow鼓励它,我认为对于具有相同问题的同事程序员来说,它将来会有所帮助.

mysql sql-update

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