-2

我正在尝试建立一个供个人使用的数据库,部分db会存储地址的数据,我这样做的方式是这样的:

表 1:地址(第 1 行和第 2 行)--外键 ----> 邮政编码

表 2:邮政编码 -- 外键 ----> 地区(例如:城市)

表 3: Locality -- 外键 ----> Provenience

表 4:出处 -- 外键 ----> 状态

表 5:州 -- 外键 ----> 国家

表 6:国家

PS: 表 1 --> 6 有嵌套的外键

我想知道如何在不重复常见列的情况下生成表 1中的所有数据以及表 2--> 6 中的所有相应数据的视图?

4

1 回答 1

0

谢谢我刚刚设法解决它的每一个人,这就是我的做法,只显示我想要的字段,我想要的行没有重复。(原谅我,我是菜鸟)

从您想要在左侧的第一个表的字段开始,

SELECT [Table 1].Address1 AS [Address Line 1],
       [Table 2].Postal_Code AS [Postal Code]

  FROM [Table 1]

       INNER JOIN
       [Table 2] on [Table 1].Primary_key_Column = [Table 2].Foreign_key_Column

为了让像我这样的 SQLite noods 变得简单:

  1. 从每个表中只选择您想要的列。
  2. 按照与数据库顺序层次结构相同的顺序从左到右对所选列进行排序。
  3. 编写 SQLite 视图查询,使表字段的出现顺序从上到下,例如我之前编写的示例。
  4. “FROM”子句中只使用第一个表。

那么,如果您想要更多表中的更多字段(包含嵌套字段的表呢?

只需执行以下操作

SELECT [Table 1].Address1    AS [Address Line 1],
       [Table 2].Postal_Code AS [Postal Code],
       [Table 3].Locality    AS [Locality],
       [Table 4].Provenience AS [Provenience]

  FROM [Table 1]      <---- You only need to mention the first table of the first field

       INNER JOIN
       [Table 2] on [Table 1].Primary_key_Column = [Table 2].Foreign_key_Column

       INNER JOIN
       [Table 3] on [Table 2].Primary_key_Column = [Table 3].Foreign_key_Column

       INNER JOIN
       [Table 4] on [Table 3].Primary_key_Column = [Table 4].Foreign_key_Column

我知道这个解决方案可能看起来很麻烦,但它的优点是:

  1. 当您想添加一个级别时,您只需在“SELECT”块的末尾添加一行,在“INNER JOIN”块的末尾添加另一行。
  2. 如果查询数据出现问题,您将更容易阅读和调试。

这就是我自己解决的方式,但我准备好听到更好的答案

于 2017-11-28T22:21:00.730 回答