我有以下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。
答案 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 selects
和declare
在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'
);