首页 > 解决方案 > 生成引用外键的表列表

问题描述

也许我在这里遗漏了一些东西,但我觉得这在 SQL 中并不少见。

我有一个包含很多值的 DB table1,以及其他几个表,每个表都有一个指向 table1 主键的​​外键。我希望 table1 中的每一行都生成引用它的所有表的列表。

例如,我有一个名为 的表Books,其中包含描述不同书籍的行。然后我有一个名为的表SchoolLibrary,其中包含他们图书馆拥有的所有书籍的行以及它们的存储位置。并非所有的书都Books出现在学校图书馆。然后我有一个名为 的表PublicLibrary,它同样包含他们拥有的所有书籍的行,以及关于谁签出它们的信息。

然后,我想选择其中的所有值Books并添加一列,其中列出了哪些图书馆引用了该书,所以它会说要么{1, []}{1, [PublicLibrary]}要么{1, [SchoolLibary, PublicLibrary]}代表书有id1,等等......

也许更有用的不仅仅是哪个表引用它,还有那个表中引用它的行的 id。所以列表类似于{1, [PublicLibrary: 5]},所以id5 in的行PublicLibrary引用了id1 的书。

我怎样才能做到这一点?

标签: sqliteforeign-keys

解决方案


在与某人讨论后,我意识到这个问题有一个简单的解决方案。只需对所有表进行 LEFT JOIN

SELECT Books._id, SchoolLibrary._id, PublicLibrary._id
FROM Books
LEFT JOIN SchoolLibrary ON Books._id = SchoolLibrary.bookId
LEFT JOIN PublicLibrary ON Books._id = PublicLibrary.bookId

这将返回一个包含所有值的表Books,以及其他表的列。如果其他表引用,将存储Books条目引用的 id 。Books如果没有,它将为 NULL

例如(其中 SchoolLibrary 和 PublicLibrary 有_id,bookId作为列):

Books        SchoolLibrary        PublicLibrary
-----        -------------        -------------
1            1    |    1          1     |    2
2            2    |    3          2     |    3
3

使用上面的脚本,它将返回以下内容:

Book._id        SchoolLibrary._id        PublicLibrary._id
--------        -----------------        -----------------
1               1                        
2                                        1
3               2                        2

推荐阅读