Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 表联接问题_Sql_Database_Ms Access_Join - Fatal编程技术网

Sql 表联接问题

Sql 表联接问题,sql,database,ms-access,join,Sql,Database,Ms Access,Join,现在我有一个主表,在其中我上传数据。因为主表有许多不同的副本,所以我将主表中的各种数据附加到其他表中,例如用户名、电话号码和位置,以保持优化。一旦我从主表中剥离了所有内容,然后将剩下的内容附加到最终优化的主表中。在这之前,我运行一个select查询,将所有剥离的表与原始主表连接起来,以便使用正确的数据连接每个表的ID。例如: Original Main Table --Name---------Number------Due Date-------Location-------Charges M

现在我有一个主表,在其中我上传数据。因为主表有许多不同的副本,所以我将主表中的各种数据附加到其他表中,例如用户名、电话号码和位置,以保持优化。一旦我从主表中剥离了所有内容,然后将剩下的内容附加到最终优化的主表中。在这之前,我运行一个select查询,将所有剥离的表与原始主表连接起来,以便使用正确的数据连接每个表的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,并根据它们与原始主表的连接将它们连接起来

当我需要引入一个不能绑定到原始主表中的新表时,我的问题就出现了。我有一个库存表,很像原来的主表,有重复项,需要优化。我通过创建一个二级表来实现这一点,该表将所有重复的设备取出并放入它们自己的表中,然后将用户名和数字去掉并放入它们的表中。我想将这个新设备表中的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.