[英]How to get at the information from a SQLite table containing two foreign keys referencing the same column
作為個人項目的一部分,我建立了一個數據庫,其中包含一個文本文件表(其路徑和基本名稱作為列),以及另一個表,該表指示哪些文件是其他文件的副本。
這是第一個表的外觀:
files(
filesid INTEGER PRIMARY KEY UNIQUE,
filename TEXT,
filesource TEXT,
path TEXT UNIQUE)
這是第二個:
duplicatefiles(
id INTEGER PRIMARY KEY UNIQUE,
filesid INTEGER,
duplicateof INTEGER,
songid INTEGER,
FOREIGN KEY(filesid) REFERENCES lyricsfiles(filesid),
FOREIGN KEY(duplicateof) REFERENCES lyricsfiles(filesid),
最后一個表具有兩列外鍵,這些外鍵引用了文件表中的ID,指示這兩個文件彼此重復。
我這樣做是為了最大程度地減少信息重復,但是現在我意識到我不知道如何查詢該表以獲取我真正想要的東西,這是兩個文件的路徑。 我已經閱讀了有關別名的信息,但是在這種情況下,我找不到有關如何使用別名的文檔。
我正在使用sqlite3和python3。
所以我的問題是:查詢數據庫以獲取所需信息的正確方法是什么? 在數據庫中表示此信息的更好方法是什么?
您需要將表files
加入2次。 為此,您需要表別名:
SELECT
ORI.filesid original_filesid
,ORI.filename original_filename
,ORI.filesource original_filesource
,DUP.filesid duplicate_filesid
,DUP.filename duplicate_filename
,DUP.filesource duplicate_filesource
FROM duplicatefiles DPF
JOIN files ORI
ON ORI.filesid = DPF.duplicateof
JOIN files DUP
ON DUP.filesid = DPF.filesid
您會看到我以別名ORI的形式加入files
,這表明該別名表示原始文件(另請參見加入條件ORI.filesid = DPF.duplicateof
)。 通過表別名DUP連接重復項。 然后使用別名選擇所需的字段,還可以重命名它們以更好地理解ORI.filesid
重命名為original_filesid
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.