sqlite - 生成引用外键的表列表
问题描述
也许我在这里遗漏了一些东西,但我觉得这在 SQL 中并不少见。
我有一个包含很多值的 DB table1,以及其他几个表,每个表都有一个指向 table1 主键的外键。我希望 table1 中的每一行都生成引用它的所有表的列表。
例如,我有一个名为 的表Books
,其中包含描述不同书籍的行。然后我有一个名为的表SchoolLibrary
,其中包含他们图书馆拥有的所有书籍的行以及它们的存储位置。并非所有的书都Books
出现在学校图书馆。然后我有一个名为 的表PublicLibrary
,它同样包含他们拥有的所有书籍的行,以及关于谁签出它们的信息。
然后,我想选择其中的所有值Books
并添加一列,其中列出了哪些图书馆引用了该书,所以它会说要么{1, []}
或{1, [PublicLibrary]}
要么{1, [SchoolLibary, PublicLibrary]}
代表书有id
1,等等......
也许更有用的不仅仅是哪个表引用它,还有那个表中引用它的行的 id。所以列表类似于{1, [PublicLibrary: 5]}
,所以id
5 in的行PublicLibrary
引用了id
1 的书。
我怎样才能做到这一点?
解决方案
在与某人讨论后,我意识到这个问题有一个简单的解决方案。只需对所有表进行 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
推荐阅读
- python - google colab python递归错误是错误吗?
- javascript - javascript toFixed 在我的计算中不起作用
- reactjs - 如何使用带有端口的 reactjs 在 laravel 中处理 CORS 问题
- r - R: ERROR - rep.int(c(1, numeric(n)), n - 1L) 中的错误:'times' 值无效
- javascript - 使用 javascript (docx-js) 修改 .docx TOC 的“样式”
- sql - SQL Server 2008 等效于“ROWS BETWEEN UNBOUNDED PRECEDING”
- typescript - 无法部署“pubsub”云功能
- flutter - 颤动:奇怪的颜色和字体大小
- php - 在实时服务器中找不到类,而在 localhost 中没有问题
- apache-spark - spark(2.3或新版本)如何确定读取gs bucket或hdfs中hive表文件的任务数?