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
にはどうすればよいですか?B
C
itemID
SELECT
注:一部のレコードには、すでにジャーナルの略語が含まれています。私はSQL
数日しか書いていませんのでINSERT
、テーブルにすでに存在するレコードを試行するときに問題が発生するかどうかはわかりません(主キーの漠然とした理解に基づいて、問題が発生すると想定しています。itemData
テーブルのスキーマセクションに行が含まれているという事実PRIMARY KEY (itemID, fieldID)
)。したがって、Xをとして含むitemID
レコードがすでにあるsを最初に除外する必要がある場合があります。itemData
fieldID