Sql 表联接问题
现在我有一个主表,在其中我上传数据。因为主表有许多不同的副本,所以我将主表中的各种数据附加到其他表中,例如用户名、电话号码和位置,以保持优化。一旦我从主表中剥离了所有内容,然后将剩下的内容附加到最终优化的主表中。在这之前,我运行一个select查询,将所有剥离的表与原始主表连接起来,以便使用正确的数据连接每个表的ID。例如:Sql 表联接问题,sql,database,ms-access,join,Sql,Database,Ms Access,Join,现在我有一个主表,在其中我上传数据。因为主表有许多不同的副本,所以我将主表中的各种数据附加到其他表中,例如用户名、电话号码和位置,以保持优化。一旦我从主表中剥离了所有内容,然后将剩下的内容附加到最终优化的主表中。在这之前,我运行一个select查询,将所有剥离的表与原始主表连接起来,以便使用正确的数据连接每个表的ID。例如: Original Main Table --Name---------Number------Due Date-------Location-------Charges M
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,并根据它们与原始主表的连接将它们连接起来
当我需要引入一个不能绑定到原始主表中的新表时,我的问题就出现了。我有一个库存表,很像原来的主表,有重复项,需要优化。我通过创建一个二级表来实现这一点,该表将所有重复的设备取出并放入它们自己的表中,然后将用户名和数字去掉并放入它们的表中。我想将这个新设备表中的ID添加到上面的select输出中。导致:
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
与前面的表不同,设备表与originalMain表没有任何关系,这正是引起我如此头痛的原因。我似乎找不到一个办法来实现这一点……有没有办法做到这一点 连接没有关系的表的唯一方法是将它们联合在一起:
select attribute1, attribute2, ... , attributeN
from table1
where <predicate>
union // or union all
select attribute1, attribute2, ... , attributeN
from table2
where <predicate>
where子句显然是可选的
编辑
或者,您可以通过在true上声明将两个表连接在一起,其作用类似于一个叉积任何两个表都可以连接。表表示应用程序关系。在某些版本中,不是实体关系建模的原始版本,请注意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
即
假设爸爸,。。。某个语句由…参数化
如果o包含oNameID、NumberID、LocationID、DueDate的行,d包含dNameID、NumberID、LocationID、DueDate、DeviceID的行,则上面包含oNameID、NumberID、LocationID、DueDate和dNameID、NumberID、LocationID、DueDate、DeviceID的行。但是您确实没有解释您想要什么行。如果您可以缩小您的问题范围,这会有所帮助,因为它看起来像是一个项目开发规范。如果您想从表中删除重复项,可以选择在查询中使用SELECT DISTINCT,这可能会有所帮助。关于,问题是我无法将设备表与输出其余ID的select查询联接,因为设备与原始主表之间没有关系。正如我已经说过的,请缩小您的问题范围:此问题是由删除重复项引起的,还是有另一个问题,不考虑重复项,如在表关系中添加外键等。?谢谢和问候,我不知道你想要什么样的答案。您已经指出,问题在于表之间没有关系。如果您的目标是在结果表中显示这两个表,则可以将这两个表合并在一起。你应该说得更具体一点。复制品真的与此无关,我只是为了细节而提到它。我不知道如何进一步缩小这个问题的范围。需要联接设备表和主表,但由于缺少关系,我无法联接它们。对不起,这么多的细节可能有用,也可能没用,有人告诉我,我在上一个问题中没有给出足够的细节。我认为你没有抓住他的问题的重点,尽管没有明确说明。他想取两个不相关的表的并集。他清楚地知道如何基于关系将表连接在一起。我真的不太理解他的问题。我同意他在那里的某个地方加入了工会。我认为OP显然不理解JOIN。一个人不会通过关系或基于关系加入,不管这意味着什么;有条件的人可以加入。我想将这个新设备表中的ID添加到上面的select输出中,随后的示例建议在我的答案中使用join。但可能还涉及到进一步的约束关系、表格和/或条件。
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.