表加入问题

时间:2014-11-16 02:59:08

标签: sql database ms-access join

现在我有一个Main表,我在其中上传数据。由于Main表有许多不同的重复项,因此我将Main表中的各种数据附加到其他表中,例如用户名,电话号码和位置,以便保持优化。一旦我从Main表中删除了所有内容,我就会将剩下的内容添加到最终优化的Main表中。在此之前,我运行一个select查询,将所有已剥离的表与原始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

在原始表被剥离之前,我运行一个select查询,该查询从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表没有任何关系,这让我非常头疼。我似乎无法找到实现这一目标的方法......无论如何要做到这一点?

2 个答案:

答案 0 :(得分:0)

“加入”没有关系的表的唯一方法是将它们组合在一起:

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

where子句显然是可选的

修改

可选地,您可以通过声明ON true来加入表格,{{1}}将起到跨产品的作用

答案 1 :(得分:0)

任何两个表都可以加入。表表示应用程序关系。在实体 - 关系建模的某些版本(不是原始版本)中(注意&#34; R&#34;在ER中代表&#34;(应用程序)关系&#34;!)外键有时被称为& #34;关系&#34 ;.您不需要其他表或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)。但你真的没有解释你想要的行。