我正在用 sqlite3 破解我的 Zotero 数据库,因为 Zotero gui 仍然不支持一次编辑多个记录。当前任务是从特定期刊中查找所有项目,分离出那些还没有值的项目journalAbbreviation
,并添加正确的缩写。以下是相关表格:
fields (fieldID, fieldName, fieldFormatID)
itemData (itemID, fieldID, valueID)
itemDataValues (valueID, value)
这是我的查询以查找我想要的所有记录:
SELECT itemData.itemID
FROM fields JOIN itemData JOIN itemDataValues
WHERE (fields.fieldname IN ('publicationTitle'))
AND (fields.fieldID = itemData.fieldID)
AND (itemData.valueID = itemDataValues.valueID)
AND (itemDataValues.value IN ('The Journal of the Acoustical Society of America'));
现在我有了itemID
s 列表,我想向表中添加一堆条目itemData
。示意图我想这样做:
INSERT INTO itemData (itemID, fieldID, valueID)
VALUES (A,X,Y),(B,X,Y),(C,X,Y), ... (W,X,Y);
其中 X 是fieldID
“journalAbbreviation”,Y 是valueID
“J”。声学。社会党。是。' (我知道如何获得这些值)。如何编写此INSERT INTO
语句以用上面查询中的s替换A
、B
、C
等?itemID
SELECT
注意:一些记录中已经有期刊缩写。我才写SQL
了几天,所以我不知道尝试INSERT
表中已经存在的记录是否会导致问题(我假设它会,基于对主键的模糊理解和itemData
表中的架构部分包含一行的事实PRIMARY KEY (itemID, fieldID)
)。因此,可能有必要首先排除那些itemID
已经有记录的 s,itemData
其中包含 X as fieldID
。