Zotero guiはまだ複数のレコードの編集を一度にサポートしていないため、sqlite3を使用してZoteroデータベースをハッキングしています。現在のタスクは、特定のジャーナルからすべてのアイテムを検索し、まだ値がないアイテムを分離して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できたので、テーブルに一連のエントリを追加し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」の場合です。アコースト。Soc。午前。' (私はそれらの値を取得する方法を知っています)。このステートメントを記述して、、、、などを上記のクエリのsにINSERT INTO置き換えるAにはどうすればよいですか?BCitemIDSELECT
注:一部のレコードには、すでにジャーナルの略語が含まれています。私はSQL数日しか書いていませんのでINSERT、テーブルにすでに存在するレコードを試行するときに問題が発生するかどうかはわかりません(主キーの漠然とした理解に基づいて、問題が発生すると想定しています。itemDataテーブルのスキーマセクションに行が含まれているという事実PRIMARY KEY (itemID, fieldID))。したがって、Xをとして含むitemIDレコードがすでにあるsを最初に除外する必要がある場合があります。itemDatafieldID