我想更新表中具有相同值的多个列。例如,如果我们考虑这张表。
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。
有没有办法通过一条语句来实现这一目标?提前致谢。
我想将 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) 我们有一个用户表,每个用户都有一个唯一的电子邮件和用户名.我们尝试在我们的代码中执行此操作,但我们希望确保用户永远不会使用相同的电子邮件用户名插入(或更新)数据库.我添加了一个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) 我尝试一次又一次更新具有相同值的特定记录,但它始终将受影响的行值返回为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行受影响对吗?我可以知道如果不更新记录,我怎么能得到零计数.
我正在尝试执行此查询:
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我要更新的另一个表中的外键.
这个条件:有一个表格在html和php haivng大约120个字段它为一个网站我提交这个表单提交到一个php页面,我首先使用$ _REQUEST []然后使用插入查询插入来检索所有值所有这些都在我的mysql数据库中的同一个表中的特定coloums中.现在我将不得不再次执行所有过程来更新这些值.因为插入查询和更新查询的语法完全不同.
我不想写另外100行代码.有没有办法使用我在插入查询中编写的代码来更新数据.
有人告诉我,我需要在触发器中使用分隔符.我正在查看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)
在这个例子中没有解释的是如何odp和total_points重叠.我们怎样才能确定total_points表的points …
在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的这两种方式有何不同(在性能方面)?
我想找到一种方法来更新其他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,了解上面创建的表格.
底座上的电话号码和需要更新EmptyTbl的Info1Tbl和Info2Tbl与这2台最新的更新信息.请帮助查询.
我正在使用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-update ×10
sql ×5
mysql ×2
sql-insert ×2
sql-server ×2
triggers ×2
ambiguous ×1
count ×1
dependencies ×1
insert-query ×1
nolock ×1
on-clause ×1
php ×1
postgresql ×1
sqlite ×1
upsert ×1