【发布时间】:2013-03-04 18:36:35
【问题描述】:
我正在使用 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'));
现在我有了itemIDs 的列表,我想将一堆条目添加到itemData 表中。理论上我想这样做:
INSERT INTO itemData (itemID, fieldID, valueID)
VALUES (A,X,Y),(B,X,Y),(C,X,Y), ... (W,X,Y);
其中 X 是“journalAbbreviation”的fieldID,Y 是“J”的valueID。声学。社会党。是。' (我知道如何获得这些值)。如何编写此 INSERT INTO 语句以将 A、B、C 等替换为我上面的 SELECT 查询中的 itemIDs?
注意:有些记录中已经有期刊缩写。我才写SQL 几天,所以我不知道尝试INSERT 表中已经存在的记录是否会导致问题(我假设它会,基于对主键的模糊理解以及itemData 表中的架构部分包含一行PRIMARY KEY (itemID, fieldID) 的事实。所以可能需要先排除那些在itemData中已经有记录的itemIDs,其中包含X为fieldID。
【问题讨论】:
-
...你试过用谷歌搜索你的问题吗? msdn.microsoft.com/en-us/library/ms188263%28v=sql.105%29.aspxstackoverflow.com/questions/25969/… 这是非常基本的语法,只要你知道它就在那里。
-
@Syn123:我以为它就在那里,然后我用谷歌搜索。作为一个新的 SQL 编写者,我显然没有找到正确的搜索词,或者当我看到它时没有识别出正确的答案。我发现的所有内容似乎都意味着您必须分别写出
INSERT INTO ... VALUES(),(),();语句的每条记录,这似乎效率低得可笑。所以我寻求帮助。 -
如果有帮助,我用谷歌搜索找到上述链接是:“SQL INSERT INTO SELECT”。我以类似的方式搜索了大多数与 SQL 相关的东西,因为 SQL 是一种如此流行的技术。
标签: sql select sqlite bulkinsert