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