从一个表返回数据以及从另一个表映射数据的SQL最佳方法

时间:2019-01-12 14:40:34

标签: sql sql-server select stored-procedures

我有以下问题。

我有一个 Entries,其中包含2列:

  • EntryID-唯一标识符
  • Name-某个名字

我有另一个EntriesMapping 多对多映射表),其中包含2列:

  • EntryID引用了EntryID表的Entries
  • PartID引用了单独PartID表中的Parts

我需要编写一个 SP ,它将返回Entries表中的所有数据,但是对于我想要的Entries表中的每一行提供所有在PartID表中注册的{strong> EntriesMapping列表。

我的问题是,鉴于 SP 的结果将由应用程序定期处理,因此性能非常重要。

1。 我是否编写了一个将选择每个条目多行的SP-如果给定条目注册了多个PartID,则我将返回多行,每行具有相同的{ {1}}和EntryID,但不同的Name

OR

2。 我是否编写了一个SP,它将在PartID表中选择每个条目 1行,并且具有一个包含所有内容的 string / xml / json 字段不同的Entries

OR

3。还有其他我想不到的解决方案吗?

解决方案1 ​​在我看来是更好的方法,但是我将传递大量重复数据。

解决方案2 不会传递额外的数据,但是 string / json / xml 将需要另外处理,从而导致每个项目的CPU时间更长。

PS:我觉得这是一个很普遍的问题,但是我找不到任何可以为不同方法提供通用解决方案或优点/缺点的资源。

1 个答案:

答案 0 :(得分:0)

我认为您需要简单的JOIN

SELECT e.EntryId, e.Name, em.PartId
FROM Entries e
JOIN EntriesMapping em ON e.EntryId = em.EntryId

这将返回您想要的内容,不需要存储过程。