2017-05-26 47 views
0

這是我使用左連接的表1和2。儘管它看起來可以放在一張桌子上。 表1就像是一個主列表,其中id不能重複 所以表2我添加了姓名和日期,其中ID可以重複獲取與最大日期和無效日期的ID的不同記錄

+----+---------+----------------+ 
| id | Date | Name   | 
+----+---------+----------------+ 
| 1 | 5/25/17 | Monica Coleman | 
| 1 | 5/26/17 | Kelsi Mines | 
| 2 |   |    | 
| 3 | 5/9/17 | Vanessa Heart | 
| 4 | 5/8/17 | Ryan Evans  | 
| 4 | 5/10/17 | Sharpay Evans | 
| 5 |   |    | 
| 6 |   |    | 
| 7 | 5/6/17 | Troy Bolton | 
+----+---------+----------------+ 

如果我使用此代碼...

SELECT P.id, R.DateAdded, R.Name FROM Table1 AS P LEFT JOIN Table2 AS R ON P.id=R.id WHERE ((([R.DateAdded])=(SELECT MAX(DateAdded) FROM R WHERE InventoryID = R.InventoryID))); 

...那麼這些結果表明...

+----+---------+----------------+ 
| id | Date | Name   | 
+----+---------+----------------+ 
| 1 | 5/26/17 | Kelsi Mines | 
| 3 | 5/9/17 | Vanessa Heart | 
| 4 | 5/10/17 | Sharpay Evans | 
| 7 | 5/6/17 | Troy Bolton | 
+----+---------+----------------+ 

但是我想回到的聲明是...

+----+---------+----------------+ 
| id | Date | Name   | 
+----+---------+----------------+ 
| 1 | 5/26/17 | Kelsi Mines | 
| 2 |   |    | 
| 3 | 5/9/17 | Vanessa Heart | 
| 4 | 5/10/17 | Sharpay Evans | 
| 5 |   |    | 
| 6 |   |    | 
| 7 | 5/6/17 | Troy Bolton | 
+----+---------+----------------+ 

回答

0

好吧,所以我得到了我的答案。我使用是空的

SELECT P.id, R.DateAdded, R.Name FROM Table1 AS P LEFT JOIN Table2 AS R ON P.id=R.id WHERE ((([R.DateAdded])=(SELECT MAX(DateAdded) FROM R WHERE InventoryID = R.InventoryID))) OR R.DateAdded IS NULL; 
0

在大多數數據庫中,您會將條件添加到ON子句(或使用ROW_NUMBER()。 MS Access都不支持。所以,使用子查詢:

SELECT P.id, R.DateAdded, R.Name 
FROM Table1 AS P LEFT JOIN 
    (SELECT R.* 
     FROM Table2 AS R 
     WHERE R.DateAdded = (SELECT MAX(R2.DateAdded) FROM Table2 R2 WHERE R.InventoryID = R2.InventoryID) 
    ) as R 
    ON P.id = R.id 
+0

它有一個錯誤FROM子句 – elaine8s

+0

@ elaine8s。 。 。也許這是由於WHERE條款中的拼寫錯誤造成的。 –

相關問題