Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Ms access 连接两个表并显示不同的记录_Ms Access_Join - Fatal编程技术网

Ms access 连接两个表并显示不同的记录

Ms access 连接两个表并显示不同的记录,ms-access,join,Ms Access,Join,我在MS Access 2010中有两个表: 零件注销表: PART_ID DRAWN_DATE LOCATION_ID C0001 07/29/2013 501 C0002 07/29/2013 604 C0003 08/01/2013 703 C0004 08/01/2013 807 C0005 08/02/2013 505 C0006 08/02/2013 602 C0007 08/02/2013 707

我在MS Access 2010中有两个表:

零件注销表:

PART_ID DRAWN_DATE LOCATION_ID
 C0001  07/29/2013     501
 C0002  07/29/2013     604
 C0003  08/01/2013     703
 C0004  08/01/2013     807
 C0005  08/02/2013     505
 C0006  08/02/2013     602
 C0007  08/02/2013     707
 C0008  08/03/2013     802
 C0009  08/03/2013     803
 C0001  10/01/2013     605
 C0002  10/02/2013     704
 C0004  10/05/2013     806
零件返回表:

PART_ID RETURN_DATE LOCATION_ID
 C0001  09/04/2013     STORE
 C0002  09/05/2013     STORE
 C0004  09/10/2013     STORE
 C0007  09/12/2013     STORE
 C0008  09/13/2013     STORE
 C0002  10/03/2013     STORE
这就是我想要的结果:

PART_ID DRAWN_DATE LOG-OUT LOCATION RETURN_DATE RETURN LOCATION
 C0001  07/29/2013       501        09/04/2013       STORE
 C0001  10/01/2013       605
 C0002  07/29/2013       604        09/05/2013       STORE
 C0002  10/02/2013       704        10/03/2013       STORE
 C0003  08/01/2013       703
 C0004  08/01/2013       807        09/10/2013       STORE
 C0004  10/05/2013       806        
 C0005  08/02/2013       505
 C0006  08/02/2013       602
 C0007  08/02/2013       707        09/13/2013       STORE
 C0008  08/03/2013       802        10/03/2013       STORE
 C0009  08/03/2013       803
但我只能得到这个:

PART_ID DRAWN_DATE LOG-OUT LOCATION RETURN_DATE RETURN LOCATION
 C0001  07/29/2013       501        09/04/2013       STORE
 C0001  10/01/2013       605        `09/04/2013       STORE`
 C0002  07/29/2013       604        09/05/2013       STORE
 `C0002  07/29/2013       604`        10/03/2013       STORE
 C0002  10/02/2013       704        `09/05/2013       STORE`
 `C0002  10/02/2013       704        10/03/2013       STORE`
 C0003  08/01/2013       703
 C0004  08/01/2013       807        09/10/2013       STORE
 C0004  10/05/2013       806        `09/10/2013       STORE`
 C0005  08/02/2013       505
 C0006  08/02/2013       602
 C0007  08/02/2013       707        09/13/2013       STORE
 C0008  08/03/2013       802        10/03/2013       STORE
 C0009  08/03/2013       803
在我写完之后:

选择L.PART_ID、L.Drawed_DATE、L.LOCATION_ID作为[LOG-OUT LOCATION],R.RETURN_DATE,R.LOCATION_ID作为RETURN_LOCATION FROM SELECT*FROM[PART LOG-OUT]ORDER BY PART_ID作为L LEFT JOIN从[PART RETURN]ORDER BY PART_ID作为R ON L.PART_ID=R.PART_ID订单作为L.PART_ID,L.Drawed_DATE,R.RETURN_DATE作为R.RETURN日期

有人能纠正我吗?谢谢

当您加入PART_ID列时,您得到的结果就是您期望得到的结果

例如,注销表中有两个C0001,它们将连接到零件返回表中的同一个C0001,因为返回表中的行之间没有任何区别:

PART LOG-OUT TABLE         -> PART RETURN TABLE
C0001  07/29/2013     501  -> C0001  09/04/2013     STORE
C0001  10/01/2013     605  -> C0001  09/04/2013     STORE

您需要加入另一个标准,或者您需要加入一些更独特的标识符,以实现您想要的结果。

您的要求有点模糊,因此我可能会退出,但您似乎只想将返回时间与返回时间之前的时间配对,类似这样的情况

SELECT L.PART_ID, L.DRAWN_DATE, L.LOCATION_ID AS [LOG-OUT LOCATION], R.RETURN_DATE, R.LOCATION_ID AS RETURN_LOCATION FROM (SELECT * FROM [PART LOG-OUT] ORDER BY PART_ID) AS L LEFT OUTER JOIN (SELECT * FROM [PART RETURN] ORDER BY PART_ID) AS R ON L.PART_ID = R.PART_ID ORDER BY L.PART_ID, L.DRAWN_DATE, R.RETURN_DATE;
SELECT L.PART_ID, L.DRAWN_DATE, L.LOCATION_ID AS [LOG-OUT LOCATION], 
       MIN(R.RETURN_DATE), MIN(R.LOCATION_ID) AS RETURN_LOCATION 
FROM (SELECT * FROM [LOG_OUT LOCATION]) AS L 
LEFT JOIN (SELECT * FROM [PART_RETURN]) AS R 
  ON L.PART_ID = R.PART_ID AND L.DRAWN_DATE < R.RETURN_DATE
GROUP BY L.LOCATION_ID,L.PART_ID,L.DRAWN_DATE
ORDER BY L.PART_ID, L.DRAWN_DATE, MIN(R.RETURN_DATE)


请注意,由于您的问题中没有将单次购买与单次退货进行配对,也没有此类样本,因此,将它们配对的逻辑非常基本。

在程序运行后,左外部联接将转换为左联接。如果应联接C0001,07/29/2013501,而不应联接C0001,10/01/2013605,你需要找到一种方法来区分两者。根据您展示的表结构,我看不到实现它的方法,因为无法知道您应该在零件返回表中加入哪个C0001。是的,这就是我要寻找的。谢谢!经过一些修改后,选择L.PART_ID、L.Drawed_DATE、L.LOCATION_ID作为[注销位置]、MINR.RETURN_DATE、MINR.LOCATION_ID作为从[PART LOG-OUT]中选择*作为L LEFT JOIN从[PART RETURN]中选择*作为L.PART_ID上的R=R.PART_ID和L.Drawed_DATE