2017-08-15 54 views
1

在MS Access中,我試圖根據不匹配另一個表中的列連接的列的連接來更新1個表。這是我需要做的。加入2個表的SQL更新

If ((Table1.A + Table1.B + Table1.C + Table1.D) 
    NOT EQUAL TO (Table2.E + Table2.F + Table2.G + Table2.H)) 
Then set Table1.error = x 

我知道這是某種類型的SQL連接,但我很努力。

更新: 好的,我終於有了一些工作。這是我有:

SELECT [Table1].[A] & [Table1].[B] & [Table1].[C] & [Table1].[D] AS Expr1 
FROM Table1, Table2 
WHERE ((([Table2].[E] & [Table2].[F] & [Table2].[G] & [Table2].[H])<> 
[Table1].[A] & [Table1].[B] & [Table1].[C] & [Table1].[D])); 

這將運行,但它顯示我每一條無可比擬的線。我需要尋找表1爲不表2中存在,只有在表中返回的行不匹配任何行1

+0

好吧,我終於找到了一些工作。這就是我所擁有的: – Nina

+0

好吧,我終於有了一些工作。這是我所擁有的: SELECT [Table1]。[A]&[Table1]。[B]&[Table1]。[C]&[Table1]。[D] AS Expr1 FROM Table1,Table2 WHERE ([Table2]。[E]&[Table2]。[F]&[Table2]。[G]&[Table2]。[H])[> [Table1]。[A]&[Table1]。[B ]&[Table1]。[C]&[Table1]。[D])); 這將運行,但它顯示我每一個無與倫比的線。我需要在表1中搜索表2中不存在的任何行,並只返回表1中的那些不匹配的行。 – Nina

回答

1
UPDATE (SELECT Table1.error    
      FROM Table1, 
       Table2 
     WHERE ((Table1.A + Table1.B + Table1.C + Table1.D) 
       NOT EQUAL TO (Table2.E + Table2.F + Table2.G + Table2.H))) 
    SET Table1.error = x 
0
UPDATE Table1 AS T1 
INNER JOIN Table2 AS T2 
    ON (Table1.A + Table1.B + Table1.C + Table1.D) NOT EQUAL TO (Table2.E + Table2.F + Table2.G + Table2.H)) 
set T1.error = x 

它將更新Table1.error與內對列的條件加入Table2總和不相等。

+0

請不要只發布代碼。解釋爲什麼它解決了這個問題。 – loki

1

您可以嘗試更新與加入的條款爲<>業績

 update T 
     set t.error = x 
     FROM Table1 AS T 
     INNER JOIN ( 
      SELECT Table2.E + Table2.F + Table2.G + Table2.H as T2_RESULT 
      from Table2 
    ) AS ON T2.T2_RESULT <> (Table1.A + Table1.B + Table1.C + Table1.D) 
0

假設場[E]表2決不能爲空,您可以通過搜索空值找到你的不匹配的表1記錄在左連接之後:

SELECT [T1].[A] & [T1].[B] & [T1].[C] & [T1].[D] AS Concat1 
FROM 
    [Table1] as T1 
    Left Join [Table2] as T2 ON 
     ((([T2].[E] & [T2].[F] & [T2].[G] & [T2].[H]) = [T1].[A] & [T1].[B] & [T1].[C] & [T1].[D])) 
WHERE 
    [T2].[E] is NULL; 

這將返回所有沒有匹配表2記錄的表1記錄。

您可以將該查詢調用到您的更新中。

0

我意識到這些字段不需要連接(它們被連接在前面的代碼中,所以我認爲它是有原因的)。所以我做了一個無與倫比的查詢嚮導,在同一查詢中分別使用了4個字段。