【问题标题】:Table Join issue表连接问题
【发布时间】:2014-11-16 02:59:07
【问题描述】:

现在我有一个Main 表,我正在其中上传数据。因为Main 表有许多不同的重复项,我将Main 表中的各种数据附加到其他表中,例如用户名、电话号码和位置,以保持优化。一旦我从Main 表中剥离了所有内容,然后我将剩下的内容附加到最终优化的Main 表中。不过,在此之前,我运行了一个选择查询,将所有剥离的表与原始 Main 表连接起来,以便将每个表的 ID 与正确的数据连接起来。例如:

Original Main Table
--Name---------Number------Due Date-------Location-------Charges Monthly-----Charges Total--
John Smith     111-1111     4/3           Chicago         234.56             500.23
Todd Jones     222-2222     4/3           New York        174.34             323.56
John Smith     111-1111     4/3           Chicago         274.56             670.23
Bill James     333-3333     4/3           Orlando         100.00             100.00 

这被分成 3 个表(名称、编号、位置),然后有一个包含一年中所有日期的日期表:

 Name Table                Number Table            Location Table        Due Date Table
--ID---Name------         -ID--Number---------     ---ID---Location----   --Date---
  1    John Smith          1 111-1111                  1    Chicago          4/1
  2    Todd Jones          2 222-2222                  2    New York         4/2
  3    Bill James          3 333-3333                  3    Orlando          4/3

在剥离原始表之前,我运行了一个选择查询,从 3 个新表中获取 ID,并根据它们与原始 Main 表的连接将它们连接起来。

     Select Output
 --Name ID----Number ID---Location ID---Due Date--
    1          1              1          4/3
    2          2              2          4/3
    1          1              1          4/3
    3          3              3          4/3

当我需要引入一个无法绑定到原始主表的新表时,我的问题就出现了。我有一个库存表,很像原来的Main 表,有重复,需要优化。我通过创建一个辅助表来做到这一点,该表将所有重复的设备取出并将它们放在自己的表中,然后剥离用户名和编号并将它们放入表中。我想将这个新设备表中的 ID 添加到我上面的选择输出中。结果:

     Select Output
 --Name ID----Number ID---Location ID---Due Date--Device ID---
    1          1              1          4/3        1
    2          2              2          4/3        1
    1          1              1          4/3        2
    3          3              3          4/3        1

与前面的表不同,设备表和原来的Main表没有关系,这也是让我头疼的地方。我似乎无法找到一种方法来实现这一点......有没有办法做到这一点?

【问题讨论】:

  • 如果你能缩小你的问题范围(它看起来像一个项目开发规范)会有所帮助。如果您想从表中删除重复项,可以选择在查询中使用 SELECT DISTINCT,这可能会有所帮助。问候,
  • 问题是我无法将设备表与输出其余 ID 的选择查询连接起来,因为设备与原始 main 表之间没有关系。
  • 正如我已经说过的,请缩小你的问题范围:这个问题是由删除重复引起的,还是有另一个问题,不管重复(比如在表关系中添加外键等) )?谢谢和问候,
  • 我不确定你想要什么样的答案。您已经指出问题在于表之间没有关系。如果您的目标是在结果表中显示这两个表,则可以将这两个表合并在一起。你应该更具体一点。
  • 重复确实与它无关,我只是为了细节而提到它。我不知道如何进一步缩小问题范围。 device 表和main 表需要加入,但由于缺少关系,我一直无法加入它们。抱歉这么多细节(可能有用也可能没用),有人告诉我我在上一个问题中没有提供足够的细节。

标签: sql database ms-access join


【解决方案1】:

可以连接任意两个表。一个表代表一个应用关系。在实体关系建模的某些版本(不是原始版本)中(请注意,E-R 中的“R”代表“(应用程序)关系”!)外键有时称为“关系”。您不需要其他表或 FK 即可加入任何两个表。

根据列名和这些名称的值来解释结果中应该出现的确切时间。也许你想要:

SELECT *
FROM the stripped-and-ID'd version of the Original AS o
JOIN the stripped-and-ID'd version of the Device AS d
USING NameID, NumberID, LocationID and DueDate

SELECT *
FROM the stripped-and-ID'd version of the Original AS o
JOIN the stripped-and-ID'd version of the Device AS d
ON o.NameID=d.NameId AND o.NumberID=d.NumberID
   AND o.LocationID=d.LocationID AND o.DueDateID=d.DueDate.

假设 p(a,...) 是一些由 a,... 参数化的语句。

如果 o 包含 o(NameID,NumberID,LocationID,DueDate) 所在的行,d 包含 d(NameID,NumberID,LocationID,DueDate,DeviceID) 所在的行,则上面包含 o(NameID, NumberID, LocationID, DueDate) AND d(NameID,NumberID,LocationID,DueDate,DeviceID)。但是你真的没有解释你想要什么行。

【讨论】:

  • 我认为您错过了他的问题的重点,尽管没有明确说明。他想合并两个不相关的表。他清楚地了解如何根据关系将表连接在一起。
  • 我真的无法理解他的问题。我同意他在某处“附加”(联合)。我认为 OP 显然 了解 JOIN。一个人不通过(或通过)关系加入(无论这意味着什么);有条件可以加入。 “我想将这个新设备表中的 ID 添加到我上面的选择输出中”,随后的示例建议在我的答案中加入。但可能还涉及更多约束(“关系”)、表格和/或条件。
【解决方案2】:

“连接”没有关系的表的唯一方法是将它们联合在一起:

select attribute1, attribute2, ... , attributeN
from table1
where <predicate>
union       // or union all
select attribute1, attribute2, ... , attributeN
from table2
where <predicate>

where 子句显然是可选的

编辑

您可以选择通过声明ON true 将表格连接在一起,这将起到交叉产品的作用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2022-06-16
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多