簡體   English   中英

如何從包含兩個引用同一列的外鍵的SQLite表中獲取信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM