python-3.x - sqlite 中条件的编号列表

标签 python-3.x sqlite

我有一个表,我试图在其中创建一个列,该列将根据有效条件递增。

在我的示例中,我需要更新 department = Marketing 的部门计数。任何人都有使用 SQLite 执行此操作的好方法吗?

当前表

Name        Department     Department_Count
James       Accounting     NULL
Jennifer    Marketing      NULL
Micheal     Warehouse      NULL
Natalie     Marketing      NULL
Rebecca     Marketing      NULL

更新表格

Name        Department     Department_Count
James       Accounting     NULL
Jennifer    Marketing      1
Micheal     Warehouse      NULL
Natalie     Marketing      2
Rebecca     Marketing      3

编辑:

目前,我将部门为“市场营销”的行插入到一个新表中,然后我使用主键或 rowid 创建一个自动递增,以便我可以对这些类型的项目进行编号。

这需要我创建一个新表,这不是最好的,因为它占用了太多空间,而且该表是多余的,因为我已经在这个原始表中拥有基础数据。

我正在使用 python 与我的数据库交互,如果这有助于解决这个问题的话。

最佳答案

更新

其实仔细想想,你可能不需要触发器:

 INSERT INTO Table (Department, Department_Count) 
    VALUES (?, (SELECT MAX(IFNULL(Department_Count, 0)+1 FROM Table WHERE Department = ?))

可能会给你你想要的。

原始答案

您不能以声明方式执行此操作,但您可以使用 trigger 以程序方式完成您想要的操作.

两种可能的策略:

  1. 使用 AFTER INSERT 触发器对最近插入的行执行 UPDATE 语句(RowID 将在 AFTER INSERT 后可用)以根据表中的当前数据将 Departement_Count 列设置为 SELECT 表达式。

  2. 使用 INSTEAD OF 触发器执行备用 INSERT,将 NEW 游标中的值与类似的 SELECT 语句相结合,以从 Department_Count 列中获取最大值(加 1)。

关于python-3.x - sqlite 中条件的编号列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50240991/

相关文章:

python - 大数(幂)python的最后一位

python - 是否可以在jupyter笔记本中将 `print`输出显示为LaTeX?

Python从父级相对导入而不使用sys.path

python - Pyperclip 复制导致操作系统错误

php - SQLite 中 FIND_IN_SET 的替代方案?

java - Android Java SQLite 没有更新?

python - 无法使用 crontab 安排 python 脚本

android - 插入和显示数据 SQLite

android - 在 Android Sqlite 中,ROWID 与主键相同吗?

android - 比较 SQLite 中的 Double NOT 字符串值