【问题标题】:SQLite Selecting the first row who has a NULL in a column and changing that column to a different valueSQLite 选择列中具有 NULL 的第一行并将该列更改为不同的值
【发布时间】:2021-10-03 11:33:04
【问题描述】:

您好,我有一个有点独特的问题,我需要在 Status 列中选择具有 NULL 的第一行并将其值更改为文本(处理中)

为了澄清,我将在需要处理数据库条目的程序中使用 SQLite。 列是 网址 姓名 状态

名称和 URL 不是我可以控制的。 状态列用于程序所有新条目都带有 NULL 值我需要用文本(处理)标记第一个条目,然后程序将引用状态中值为(处理)的行列,完成后将其更改为 [FINISHED]

另外我不想选择任何在 URL 列中也有 NULL 的行。

我尝试了这段代码,但它没有让我到任何地方

SELECT * FROM List WHERE Status IS NULL ORDER BY ROWID ASC LIMIT 1
update List set Status = replace ( Status, NULL ,'(processing)')
commit;

我绝对不想做的是同时更改 Status 列中的所有 NULL 值。只有第一个。

【问题讨论】:

    标签: sql sqlite sql-update rowid


    【解决方案1】:

    您需要在UPDATE 语句中添加一个WHERE 子句:

    UPDATE List 
    SET Status = '(processing)'
    WHERE rowid = (SELECT MIN(rowid) FROM List WHERE Status IS NULL)
    

    如果你也想要这个条件:

    我也不想选择任何在 URL 中也有 NULL 的行 列。

    然后:

    UPDATE List 
    SET Status = '(processing)'
    WHERE rowid = (SELECT MIN(rowid) FROM List WHERE Status IS NULL)
      AND URL IS NOT NULL
    

    或:

    UPDATE List 
    SET Status = '(processing)'
    WHERE rowid = (SELECT MIN(rowid) FROM List WHERE Status IS NULL AND URL IS NOT NULL)
      
    

    【讨论】:

    • 我努力让你提供的代码工作,但我做不到,你能写下我需要完成这项任务的完整声明吗?
    • @Enigma 您所说的完整声明是什么意思?我的每一个查询都是一个完整的陈述。如果你不能让它工作,那么这意味着你没有正确解释你的问题。使用示例数据和预期结果编辑您的问题,以阐明您想要什么。最好使用小提琴:dbfiddle.uk/?rdbms=sqlite_3.27 用于您的数据。
    • 该命令给了我错误并且什么也不执行。样本数据pastebin.com/xGzNi9DT
    • @Enigma 如您在此处看到的:dbfiddle.uk/… 所有查询在语法上都是正确的。如果你得到错误,这意味着你做错了什么。
    • 该语句不在数据库上执行任何操作。我收到更新错误。
    猜你喜欢
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多