【问题标题】:Generate list of tables which reference a foreign key生成引用外键的表列表
【发布时间】:2020-04-01 14:44:49
【问题描述】:

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

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

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

然后我想选择Books 中的所有值并添加一个列,其中列出了哪些图书馆引用了该书,因此它会说{1, []}{1, [PublicLibrary]}{1, [SchoolLibary, PublicLibrary]} 用于带有@ 的书987654329@1等...

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

我该怎么做?

【问题讨论】:

    标签: sqlite foreign-keys


    【解决方案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,则存储哪个条目引用Books的id。如果不是,它将为NULL

    例如(其中 SchoolLibrary 和 PublicLibrary 有 _idbookId 作为列):

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多