根据其他表中最旧的条目更新条目

时间:2014-05-22 07:54:51

标签: sql sql-server-ce

我有以下2个表格(在SQL Server Compact Edition, Version 3.5.8080.0上运行):

tblInventory

|                     GUID_INVENTORYID |               DAT_DEADLINE |
|--------------------------------------|----------------------------|
| 13720A5F-F1F0-4420-AA9C-11CB955B86AA |         2014-05-01         |


tblInventoryDetails

|              GUID_INVENTORYDETAILSID |                     GUID_INVENTORYID |               DAT_INSERTED |
|--------------------------------------|--------------------------------------|----------------------------|
| EE222BCE-8182-4C70-A07C-7568838055A7 | 13720A5F-F1F0-4420-AA9C-11CB955B86AA |         2014-05-21         |
| 9BD8A3DC-31BE-418D-9F80-B88A50A58D31 | 13720A5F-F1F0-4420-AA9C-11CB955B86AA |         2014-05-10         |



当然,tblInventoryDetails中可能有两个以上的条目;所有条目都链接到tblInventory中的一个条目
现在,我想根据dat_Deadline中最早的dat_Inserted更新tblInventoryDetails(在这种情况下为'2014-05-10')。

我知道我可以得到最像这样的条目:

SELECT TOP (1) dat_Inserted 
FROM tblInventoryDetails
WHERE GUID_INVENTORYID = @GUID_INVENTORYID
ORDER BY dat_Inserted

但是如何在我的UPDATE声明中使用该声明?

我也为此做了SQLFiddle

2 个答案:

答案 0 :(得分:2)

尝试这种方式:

UPDATE
  tblInventory
SET
  DAT_DEADLINE = 
  (
   SELECT MIN(DAT_INSERTED)
   FROM tblInventoryDetails 
   WHERE tblInventoryDetails.GUID_INVENTORYID = tblInventory.GUID_INVENTORYID
  )
WHERE
  tblInventory.GUID_INVENTORYID = '13720A5F-F1F0-4420-AA9C-11CB955B86AA'

另一种解决方案是:

DECLARE @min_date datetime
SET @min_date = 
  (
   SELECT MIN(DAT_INSERTED)
   FROM tblInventoryDetails 
   WHERE tblInventoryDetails.GUID_INVENTORYID = '13720A5F-F1F0-4420-AA9C-11CB955B86AA'
  )

UPDATE
  tblInventory
SET
  DAT_DEADLINE = @min_date
WHERE
  tblInventory.GUID_INVENTORYID = '13720A5F-F1F0-4420-AA9C-11CB955B86AA'

因为有人指出nested selectsdeclare在SQL Server Compact Edition中不起作用。两个单独陈述的解决方案更适合这个问题。 首先获取min日期值,然后明确update正确的表格

答案 1 :(得分:0)

我不是SQL大师,但像这样的子查询可能对你有帮助。

UPDATE tblInventory
SET dat_deadline = (
  SELECT MIN(dat_Inserted)
  FROM tblInventoryDetails
  WHERE guid_InventoryID = '13720A5F-F1F0-4420-AA9C-11CB955B86AA'
);