2009-12-11 162 views
1

我想根據條件更新我的表1與來自表2的某些字段值。但我無法獲得正確的查詢。這裏的條件:更新另一個表的記錄表

我有一個表1與日期字段應該從表2日期字段更新。條件是表1的id應該等於表2的id(表2具有表1的id作爲FK)。另一個條件應該是表2中有一個varchar字段,它應該有特定的值,比如說「Test」。無論表2中字段的值是否爲「測試」,我想在表1日期字段中更新該記錄的日期。但還有一個問題。它可能會超過1次記錄相同的ID表2中可以具有作爲「測試」

我試圖查詢爲:

UPDATE A 
SET A.Date = Max(B.[Date]) 
FROM Table1 A 
INNER JOIN Table2 B ON A.ID = B.FK_ID 
WHERE (B.Changed LIKE 'Test') 
AND A.Date IS NULL 

但這不是工作作爲SQL不允許Max在沒有分組的情況下更新。請幫忙。有點緊急。

回答

2

您需要創建另一個內加入其中,表1的ID的耦合與表2的像這樣的最大日期:

UPDATE Table1 
SET  Date = BDate.MaxDate 
FROM  Table1 A 
      INNER JOIN Table2 B ON A.ID = b.FK_ID 
      INNER JOIN (
       SELECT A.ID, [MaxDate] = MAX(B.Date) 
       FROM  Table1 A 
         INNER JOIN Table2 B ON A.ID = b.FK_ID 
       GROUP BY A.ID 
     ) BDate ON BDate.ID = A.ID 
WHERE  B.Changed LIKE 'Test' 
      A.Date IS NULL 
1

你總是可以使用子查詢:

UPDATE Table1 a SET 
    [Date] = (SELECT MAX([Date]) FROM Table2 b WHERE a.ID = b.FK_ID AND b.Changed LIKE 'Test') 
WHERE [Date] IS NULL 
+0

看起來正確的,但爲什麼使用LIKE而不是equals? – 2009-12-11 08:21:37

+0

我的第一個衝動是將它編輯爲平等,但後來我認爲'Test'顯然是一個示例值,所以我想它可能被認爲是它讀取的東西,它實際上會在這個活動實現中實現,並從那裏,我只是假設特德知道'LIKE'和'='之間的差異,並決定不選擇,因爲它是相當周邊的問題=) – 2009-12-11 08:24:33

+0

涼爽的香蕉,想要確保我hadn沒有錯過隨機的語法變化 – 2009-12-11 18:53:11

相關問題