首页 > 解决方案 > SQL:在不创建新记录的情况下将 Update 与 Select 和 Insert 一起使用以插入数据?这是可能的?备择方案?

问题描述

使用插入和选择,通过 cursor.executescript,我将表的列数据复制到新表中。一切正常。使用 SQLite。

在此处输入图像描述

然而,问题是创建了“新”行记录(图片中最后一个红色行)。相反,我想在已经存在的记录的列中插入(复制)数据,所以都在同一行中。我想我需要上传而不是插入,但我不知道如何(使用上传)将表列的数据复制到新表中。例如,我想在从 1 到 20 的所有记录中都有数据“1”,而不是在第 21 行(第 21 行不能存在)。我能怎么做?你能帮我写代码吗?谢谢

cursor.executescript("""
    INSERT INTO ARCHIVIO_Squadre_Campionato (ID_Campionato) #new table in photo
    SELECT ID_Campionato FROM ARCHIVIO_Campionati #old/other table
    WHERE Nome_Campionato='Serie A'; #column name of old/other table
    """)
con.commit()

更新:对于更精确的问题,我添加了两个 sql 表:

CREATE TABLE "ARCHIVIO_Campionati" (
    "ID_Campionato" INTEGER, #example: 1
    "Nome_Campionato"   INTEGER, #example: Serie A
    PRIMARY KEY("ID_Campionato" AUTOINCREMENT)
);

CREATE TABLE "ARCHIVIO_Squadre_Campionato" (
    "ID_Sq" INTEGER,
    "Nome_Squadra"  TEXT,
    "ID_Campionato" INTEGER,
);

在此处输入图像描述

标签: pythonsqlpython-3.xsqlite

解决方案


在 中插入这 20 行后ARCHIVIO_Squadre_Campionato,您必须更新表而不插入新行:

UPDATE ARCHIVIO_Squadre_Campionato 
SET ID_Campionato = (
  SELECT ID_Campionato 
  FROM ARCHIVIO_Campionati
  WHERE Nome_Campionato='Serie A'
)
WHERE ID_Campionato IS NULL;

WHERE子句并不是真正需要的,因为所有行(在表的当前状态下)在列中都有 NULL,ID_Campionato但在随后调用相同查询的不同值(例如“Serie B”行)中将需要它。


推荐阅读