【问题标题】:Sql view from multiple tables来自多个表的 Sql 视图
【发布时间】:2015-04-04 22:32:05
【问题描述】:

我被困在一个查询中,请帮助。 我要创建视图。

表1

ID | Acode | Bcode | Ccode |
1  | 10    | 101   | 102   |
2  | 11    | 100   | 101   |
3  | 10    | 100   | 102   |

表2

Acode | Adescription |
10    | English      |
11    | Math         |

表3

Bcode | Bdescription |
100   | Grade A      |
101   | Grade B      |

表4

Ccode | Cdescription |
 100  | Level A      |
 101  | Level B      |
 102  | Level C      |

我想根据 table1 中的代码打印 Table1 中的所有行以及来自其他表的描述。

输出应该是: 数据

新视图

ID | Acode |Adescription | Bcode | Bdescription | Ccode | Cdescription |
1  | 10    | English     | 101   |   Grade B    |  102  |   Level C    |
2  | 11    | Math        | 100   |   Grade A    |  101  |   Level B    |

3 | 10 |英语 | 100 |甲级 | 102 | C级|

我创建了左连接,但它返回的行数比 table1 中的实际行数多。我只想拥有来自 table1 的所有记录以及来自其他表的描述。

请帮忙

【问题讨论】:

  • 请编辑您的问题并显示您的查询以及示例数据。
  • 在一个或多个连接表中,可能存在不止一行的相同值。在这种情况下,您将获得比 Table1 中更多的行。
  • 是的,正在发生。我只想从 table1 获取记录。并希望根据 table1 中的代码显示来自另一个表的描述。我如何为此创建视图,它只给我 table1 的所有记录和描述。加入或嵌套查询,不知道怎么弄。
  • 同一代码多行但描述不同时,应该返回哪个描述?显示 Gordon 建议的示例数据和预期结果,以澄清您的问题。
  • @AmarpalSandhu 。 . .您的示例数据不会生成多行。

标签: sql sql-server join view


【解决方案1】:

下面是一个例子。由于您没有发布您的原始查询尝试,我们无法真正说明为什么您会获得多行。不需要LEFT JOIN,除非您在连接表中缺少代码。

SELECT  Table1.ID
      , Table1.Acode
      , Table2.Adescription
      , Table1.Bcode
      , Table3.Bdescription
      , Table1.Ccode
      , Table4.Cdescription
FROM    dbo.Table1
        JOIN dbo.Table2 ON Table2.Acode = Table1.Acode
        JOIN dbo.Table3 ON Table3.Bcode = Table1.Bcode
        JOIN dbo.Table4 ON Table4.Ccode = Table1.Ccode;

【讨论】:

  • 感谢您的帮助。抱歉,我无法在此处添加完整查询,因为它只是示例,实际查询有 18 个表,并且在这里会很长且令人困惑。它工作得很好,但如果没有输入或留空描述,那么它会跳过整个记录。
  • @AmarpalSandhu,如​​果您缺少行(在示例数据中不明显),则将内部联接更改为左联接,您将获得仅在联接表中重复的代码值的重复项。
  • 谢谢 我两种方法都试过了我想从 table1 中获得纯粹的记录并获取与代码匹配的描述。
  • 如果我添加 LEFT JOIN,我不会丢失任何记录,但只会在 table3 上重复记录,其中 table1 记录中使用了相同的代码供另一个用户使用。
  • @AmarpalSandhu,我在您的示例数据中看不到任何重复项。
【解决方案2】:

感谢您的帮助

LEFT Join 运行良好。我试图一一缩小表的范围,找到我得到重复记录的表。找到表后,我发现我忘记添加唯一键,并且输入了两次记录(描述),这给出了重复的记录,并且总行数增加了。

感谢大家帮助我,感谢 Dan Guzman 指出我的重复代码。

【讨论】:

    猜你喜欢
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多