我有一个表中包含一些持久性数据.现在,当我查询它时,我还有一个非常复杂的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) 我有一个通用的问题,我将尝试使用一个例子来解释.
假设我有一个包含字段的表:"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,我没有找到实现此目的的其他方法.
有任何想法吗?
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文档说:
这些值将绑定为字符串.
参考文献:
我有两个表需要完全相同的值用于非规范化目的.
这是查询.
第一张桌子
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
无论如何将两个更新组合成一个?
我想像这样更新我的表:
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,x和y的组合是我用来识别我需要的行的方法.)
这里描述的codeIgniter中的update_batch()函数: 使用CodeIgniter更新批处理 是有帮助的并且几乎完美但它只允许1个单个where子句,你不能(据我理解并尝试过)输入一个包含多个where子句的数组.
我也检查了这个问题: MYSQL UPDATE SET在同一列但有多个WHERE子句 但它只允许多行更新只包含一个不同的WHERE子句,我需要多个WHERE子句!:)
Anwsers可以使用简单的SQL,也可以使用php(和CodeIgniter)或以不同的方式使用.我想以任何可能的方式解决这个问题;)
我真的可以使用建议/帮助!= d
嗨,我正在尝试学习使用预准备语句的正确方法,以避免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) 我在此之前阅读了各种帖子.但它们似乎都不适合我.
正如标题所示,我正在尝试从另一个表中的列更新一列.我不记得以前有这个问题..
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)
我觉得我的大脑只是关闭了我,并希望重新启动它的任何颠簸.谢谢 :)
我的数据库上有一张表.我的表名是"公司".我想将数据"company_name"更改为大写首字母.例如;
"ABC公司"
"DEF PLASTICITY"
如
"Abc公司"
"可塑性"
我知道我应该使用"UPDATE"命令.但是怎么样?谢谢你的帮助!
(CONCAT不起作用)
如何才能更新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)
但我每次只需更新一行
在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鼓励它,我认为对于具有相同问题的同事程序员来说,它将来会有所帮助.