如何将第二条评论的文本更新为"新内容"
{
name: 'Me',
comments: [{
"author": "Joe S.",
"text": "I'm Thirsty"
},
{
"author": "Adder K.",
"text": "old content"
}]
}
Run Code Online (Sandbox Code Playgroud) 请保持温和,我正在尝试更新 sql server 中的查询,但遇到错误。这是我在同一个数据库中的两个表和下面提供的查询,我的要求是根据表 1 更新 table2 中的列 groupCode,但我面临以下错误:
错误
消息 512,级别 16,状态 1,第 1 行子查询返回了 1 个以上的值。当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的。该语句已终止。
表格1
**Dept** **DeptCode** **GroupName** **GroupCode**
IT 32 Login-Els 1
IT 32 QC-Els 4
CT 20 Login-OUP 1
CT 20 XML-OUP 2
CT 20 QC-OUP 4
MECH 34 Login-CEN 1
MECH 34 XML-CEN 2
MECH 34 PAGINATION-CEN 3
MECH 34 QC-CEN 4
Run Code Online (Sandbox Code Playgroud)
表2
**Activity** **DeptCode** **Group**
Login-Els 32 NULL
QC-Els 32 NULL
Login-OUP 20 NULL
XML-OUP 20 NULL
QC-OUP 20 NULL …Run Code Online (Sandbox Code Playgroud) 我正在使用PHP和MySQL.
如果我使用INSERT ON DUPLICATE UPDATESQL语句,那么如何知道上一次操作是否是成功插入而不是更新或不成功插入?
假设是有问题的表没有使用自动增量,所以我不能用一个mysql_insert_id来帮助我找出答案.
我有一个包含所有类型参数的表.该表的结构是:id,object_id,param_name,param_value
以下代码有效,但它会附加结果而不是更新它们.事实是我不能使用ON DUPLICATE KEY因为我的字段是非唯一的(当然除了id)
INSERT INTO `params_table` (`object_id`, `param_name`, `param_value`)
SELECT
A.id AS my_object_id,
'XYZ' AS my_param_name,
IF(TMP.abc IS NULL,0,1) AS my_param_value
FROM
ref_table AS A
LEFT JOIN tmp_table AS TMP ON TMP.abc = A.abc
ON DUPLICATE KEY
UPDATE `param_value` = IF(TMP.abc IS NULL,0,1);
Run Code Online (Sandbox Code Playgroud) 如果要插入实体,请执行以下操作:
$user = new User();
$user->setEmail('john@doe.com');
$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
但是,如果我想创建一个可以拥有一个用户的文章呢?
目前,我需要这样做:
$user = $em->getRepository('User')->find($id);
$article->setUser($user);
Run Code Online (Sandbox Code Playgroud)
这是因为关系,Doctrine 2要求用户实体.
但是,我不能"模拟"一个User对象,因为我不希望手动设置id,因此我不能这样做:
$user = new User();
$user->setId(45);
Run Code Online (Sandbox Code Playgroud)
我错了这个行为,你怎么办?
加载User实体只是为了设置关系,即使使用缓存也是一种性能问题,而缓存并不总是一种选择,特别是对于更新.
php entity-relationship lazy-loading insert-update doctrine-orm
我目前正在研究一个Java项目,我需要准备一个很大的(对我来说)mysql数据库。我必须使用Jsoup进行网络抓取,并将结果也存储到我的数据库中。据我估计,我将插入大约1,500,000至2,000,000条记录。在我的第一个试用版中,我只是使用循环插入这些记录,而我花了一个星期的时间才能插入大约1/3的所需记录,我认为这太慢了。是否有可能使该过程成为多线程,这样我就可以将我的记录分为3组,例如每组500,000条记录,然后将它们插入一个数据库(特别是一个表)中?
我正在尝试执行以下查询
INSERT INTO hotspot(timestamp) VALUES
(timestamp with time zone '2012-10-25 14:00:00 +05:00' at time zone 'EET');
Run Code Online (Sandbox Code Playgroud)
我想将时间戳作为变量传递.
我的时间戳列是带时区的时间戳类型.
你知道如何做到这一点吗?
当我做...(Java,Postgresql)
String stm= "INSERT INTO hotspot(timestamp) VALUES(timestamp with time zone ? at time zone 'EET')";
pst = con.prepareStatement(stm);
pst.setString(1, "2012-08-24 14:00:00 +05:00");
pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
我在"$ 1"或附近收到语法错误
无论如何我能克服这个错误吗?先感谢您!!
更新:我尝试通过以下方式使用setTimestamp ...
Calendar c=Calendar.getInstance(TimeZone.getTimeZone("GMT+05:00"));
String stm= "INSERT INTO hotspot(timestamp) VALUES(?)";
pst = con.prepareStatement(stm);
pst.setTimestamp(1,Timestamp.valueOf("2012-01-05 14:00:00"), c );
pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
我想数据库中的正确值应该是(关于我的本地时区是EET(+02))
2012-01-05 11:00:00 +02
但使用pgadmin我检查值,我得到
2012-01-05 14:00:00 +02
有什么建议?
postgresql syntax-error insert-update timestamp-with-timezone
我有一个nvarchar列,我需要在字符串中的固定点插入一个连字符.连字符需要在最右边的字符和下一个字符之间,并且再次在右边的第3个位置,例如:列值是
0000050704
Run Code Online (Sandbox Code Playgroud)
我需要它
0000050-70-4
Run Code Online (Sandbox Code Playgroud)
或价值是
0555256321
Run Code Online (Sandbox Code Playgroud)
它应该是
0555256-32-1
Run Code Online (Sandbox Code Playgroud)
看不出这是怎么做的.谁能给我一点帮助?
在Azure表存储的批量保存操作中,是否有一种有效的方法来替换实体上的某些属性(如果已存在);但是更新新实体的所有属性吗?
这是我正在谈论的场景。
我有一个名为Order的实体
public class Order : TableEntity
{
public Order(String department, string orderId)
{
this.PartitionKey = department;
this.RowKey = orderId;
}
public DateTime CreatedOn {get; set;}
public String CreatedBy {get; set;}
public DateTime UpdatedOn {get; set;}
public String UpdatedBy {get; set;}
//Class contains other properties which could add up to 1MB
}
Run Code Online (Sandbox Code Playgroud)
情境
我可以在不读取表存储中内容的情况下一步完成此操作吗?
这是一种实现方法(非常粗糙的伪代码)
function Upsert(Dictionary<String, Order> ordersInput)
{
//1. Read existing ordersInput from database
var existingOrders = Retrieve(ordersInput.Values);
//2. Update …Run Code Online (Sandbox Code Playgroud) 我的表结构
表:标记

我的目标: 我想插入或更新条件的多个记录
我目前正在查询此查询
第一步
SELECT * FROM `marks` WHERE `student` =115 AND `param` =1
Run Code Online (Sandbox Code Playgroud)
第二步
if
records found by matching above criteria i just update record by my new values
else
insert new record into my table
Run Code Online (Sandbox Code Playgroud)
它会正常工作.但我想减少代码并将其优化为单个查询.它可能与否?我在MySQL docs上发现了这个INSERT ... ON DUPLICATE KEY UPDATE.如果这是一个解决方案.我怎么能通过查询实现?
注意:我正在使用Yii框架 .来自Yii的建议也欢迎
已编辑: 此查询不会更新行.但逃避插入工作正常
INSERT INTO marks(`student`,`param,mark`,`created`,`lastmodified`,`status`)
VALUES
(11,30,10,'00-00-00 00:00:00','00-00-00 00:00:00','U')
ON DUPLICATE KEY UPDATE `mark`=VALUES(`mark`)
Run Code Online (Sandbox Code Playgroud) insert-update ×10
mysql ×3
php ×3
azure ×1
c# ×1
doctrine-orm ×1
document ×1
java ×1
jdbc ×1
lazy-loading ×1
postgresql ×1
rethinkdb ×1
sql ×1
sql-server ×1
sql-update ×1
syntax-error ×1
upsert ×1
yii ×1