标签: sql-update

如何在SQL中更新具有相同值或不同值的多个列?

我想更新表中具有相同值的多个列。例如,如果我们考虑这张表。

col1     col2
--------------
2        -99
-99        5
3          6
4        -99
Run Code Online (Sandbox Code Playgroud)

我想将表中的 -99 值更新为 NULL,预期结果如下所示。

col1     col2
--------------
2        NULL
NULL        5
3           6
4        NULL
Run Code Online (Sandbox Code Playgroud)

我正在使用这种方式。

update table_name set col1 = null where col1 = -99;
update table_name set col2 = null where col2 = -99;
Run Code Online (Sandbox Code Playgroud)

或者如果我想根据独特的条件更新列该怎么办?例如,第 1 列中为空的 -99 和第 2 列中为空的 5。

有没有办法通过一条语句来实现这一目标?提前致谢。

sql sql-update

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

使用子查询和 ON CONFLICT 进行 INSERT INTO

我想将 JSON 数组中的所有元素插入到表中:

INSERT INTO local_config(parameter, value)
SELECT json_extract(j.value, '$.parameter'), json_extract(j.value, '$.value')
FROM json_each(json('[{"parameter": 1, "value": "value1"}, {"parameter": 2, "value": "value2"}]')) AS j
WHERE value LIKE '%'
ON CONFLICT (parameter) DO UPDATE SET value = excluded.value;
Run Code Online (Sandbox Code Playgroud)

到目前为止这有效,但我真的需要这个WHERE value LIKE '%'条款吗?

当我删除它时:

INSERT INTO local_config(parameter, value)
SELECT json_extract(j.value, '$.parameter'), json_extract(j.value, '$.value')
FROM json_each(json('[{"parameter": 1, "value": "value1"}, {"parameter": 2, "value": "value2"}]')) AS j
ON CONFLICT (parameter) DO UPDATE SET value = excluded.value;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

[SQLITE_ERROR] SQL error or missing database (near …
Run Code Online (Sandbox Code Playgroud)

sqlite upsert on-clause sql-update sql-insert

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

添加约束以防止SQL Update触发器中出现重复

我们有一个用户表,每个用户都有一个唯一的电子邮件和用户名.我们尝试在我们的代码中执行此操作,但我们希望确保用户永远不会使用相同的电子邮件用户名插入(或更新)数据库.我添加了一个BEFORE INSERTTrigger,可防止重复用户的插入.

CREATE TRIGGER [dbo].[BeforeUpdateUser]
   ON  [dbo].[Users]
   INSTEAD OF INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    DECLARE @Email nvarchar(MAX)
    DECLARE @UserName nvarchar(MAX)
    DECLARE @UserId int
    DECLARE @DoInsert bit

    SET @DoInsert = 1

    SELECT @Email = Email, @UserName = UserName FROM INSERTED

    SELECT @UserId = UserId FROM Users WHERE Email = @Email

    IF (@UserId IS NOT NULL)
        BEGIN
            SET @DoInsert = 0
        END

    SELECT …
Run Code Online (Sandbox Code Playgroud)

sql triggers sql-update sql-insert

0
推荐指数
2
解决办法
3155
查看次数

PostgreSQL更新没有返回零计数

我尝试一次又一次更新具有相同值的特定记录,但它始终将受影响的行值返回为1.

update users set active = 1 where id = 304
1 row(s) affected.
Run Code Online (Sandbox Code Playgroud)

再次相同的查询

update users set active = 1 where id = 304
1 row(s) affected.
Run Code Online (Sandbox Code Playgroud)

但第二次更新应该返回0行受影响对吗?我可以知道如果不更新记录,我怎么能得到零计数.

sql postgresql count sql-update

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

如果你不知道id,你怎么做更新,只是你知道另一个表关系的信息

我正在尝试执行此查询:

UPDATE asignaturasemestre 
   SET asignatura11 = 'cambiado' 
 WHERE asignaturasemestre.iddatosgenerales = datosgenerales.iddatosgenerales 
   AND datosgenerales.curp = 'CURP'
Run Code Online (Sandbox Code Playgroud)

我知道这很糟糕,但这是个主意:

正如你所看到的,我不知道iddatosgenerales,但我知道它有一个外键(iddatosgenerales).用户只会编写curp,所以这个curp不在另一个表中,所以我需要更新另一个表,但我不知道这行的id.正如我告诉你的那样,我只知道CURP列,但这是在另一个表中(这是唯一的).但它不是主键 - 它不介意,id是iddatosgenerales我要更新的另一个表中的外键.

sql sql-server sql-update

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

如何使用mysql更新查询和mysql一起插入查询?

这个条件:有一个表格在html和php haivng大约120个字段它为一个网站我提交这个表单提交到一个php页面,我首先使用$ _REQUEST []然后使用插入查询插入来检索所有值所有这些都在我的mysql数据库中的同一个表中的特定coloums中.现在我将不得不再次执行所有过程来更新这些值.因为插入查询和更新查询的语法完全不同.

我不想写另外100行代码.有没有办法使用我在插入查询中编写的代码来更新数据.

php mysql insert-update insert-query sql-update

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

MySQL:如何在触发器中使用分隔符?

有人告诉我,我需要在触发器中使用分隔符.我正在查看MySQL手册页,我在示例中找到了它; 但是,它不在通用文档中.

这是我要纠正的代码:

CREATE TRIGGER adult BEFORE INSERT OR UPDATE ON table5.column5
FOR EACH ROW BEGIN
  UPDATE table1 SET column5 = table5.column5 WHERE table5id = table1xtable5.table5id WHERE table1xtable5.table1id = OLD.table1.id$
END$
Run Code Online (Sandbox Code Playgroud)

老实说,我不知道如何做到这一点,http ://dev.mysql.com/doc/refman/5.5/en/create-trigger.html上的文档似乎是一个非常不充分的参考.例如,当阅读" old"和" new"时,它引用" subject table" - 与触发器相关联的表.有两个与此触发器关联的表,我实际上是尝试将更多表与此触发器关联....当查看示例代码时,UPDATE影响table4 的行仅使用table4中的列(它们是将值加1).而且,他们正在使用WHERE ~ a3 = NEW.a1.我不认为id的工作方式.不应该有跨表的通用ID.对于适用性,它们肯定应该在示例中使用相互依赖表.

我实际上在今天早些时候问了一个类似的问题,关于这样做的好方法是什么,但现在我想知道,如果有方法的话.谢谢阅读.:)

以下是更新另一个表的触发器示例,但它似乎没有使用分隔符:

CREATE TRIGGER mytrigger BEFORE INSERT ON odp 
FOR EACH ROW
  UPDATE total_points SET points = points + NEW.points;
Run Code Online (Sandbox Code Playgroud)

在这个例子中没有解释的是如何odptotal_points重叠.我们怎样才能确定total_points表的points …

mysql dependencies triggers sql-update

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

在UPDATE语句中使用NOLOCK

在UPDATE语句中使用NOLOCK:

以下两个查询都运行正常.

UPDATE ml
SET CreationUserId = 'system'
FROM mst_login AS ml WITH (NOLOCK)
WHERE LoginId = 300


UPDATE mst_login
SET CreationUserId = 'system'
FROM mst_login WITH (NOLOCK)
WHERE LoginId = 300
Run Code Online (Sandbox Code Playgroud)

在更新语句中使用NOLOCK的这两种方式有何不同(在性能方面)?

sql nolock sql-update

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

使用其他2个表更新SQL记录

我想找到一种方法来更新其他2个表.这是场景:

EmptyTbl: contents missing info (fname, lname, address)

Info1Tbl & Info2Tbl: complete info
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle - http://sqlfiddle.com/#!3/b8b13/1,了解上面创建的表格.

底座上的电话号码和需要更新EmptyTblInfo1TblInfo2Tbl与这2台最新的更新信息.请帮助查询.

sql-server-2008 sql-update

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

为什么我的SQL UPDATE语法给出“模棱两可的列名”?

我正在使用SQL Server 2014,并且正在运行以下UPDATE查询:

UPDATE ReservationStay 

SET ReasonForstayCode = b.ReasonForStayCode

FROM MissingReasonForStay b

WHERE ReservationStayID = b.ReservationStayID
Run Code Online (Sandbox Code Playgroud)

该查询的目的是使用“ MissingReasonForStay”表中的数据更新“ ReservationStay”表中名为“ ReasonForStayCode”的列。查找需要使用两个表的“ ReservationStayID”列来完成。

问题是SSMS在代码的第4行下划线显示了ReservationStayID,并且当我运行查询时,我收到一条消息:列名“ ReservationStayID”不明确

我的代码有什么问题?

sql-server ambiguous sql-update

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