2012-10-14 25 views
9

Tôi đang sử dụng Truy cập microsoft.SQL Cập nhật từ một kết nối bên trong

Nếu truy vấn này:

(SELECT FERMENT.FermentId 
FROM FERMENT 
INNER JOIN [BELGIUM BEER] 
ON 
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a 

trả FermentId, làm thế nào để cập nhật một bảng khác nhau với cột đó?

Ví dụ:

UPDATE EXAMPLETABLE 
SET EXAMPLETABLE.FermentId = a.FermentId 
FROM a 
(SELECT FERMENT.FermentId 
FROM FERMENT 
INNER JOIN [BELGIUM BEER] 
ON 
FERMENT.FermentName = [BELGIUM BEER].FermentId ORDER BY [BELGIUM BEER].BeerId) a 
+1

Nếu Tôi không nhầm bạn cần một mối quan hệ giữa 'EXAMPLETABLE' và điều bạn chọn, hơn bạn có thể sử dụng một cái gì đó như' UPDATE EXAMPLETABLE SET EXAMPLETABLE.FermentId = (SELECT FERMENT.FermentId TỪ FERMENT INNER JOIN [BELGIUM BEER ] TRÊN FER MENT.FermentName = [BELGIUM BEER] .FermentId WHERE EXAMPLETABLE.relationFieldName = [BELGIUM BEER] .relationField ORDER BY [BELGIUM BEER] .BeerId) ' – xception

Trả lời

7

Giả sử rằng các phụ truy vấn trả về nhiều hơn một giá trị, bạn cần một chìa khóa thứ hai để kết nối (JOIN) giữa các giá trị mới và bảng bạn muốn cập nhật (EXAMPLETABLE).

Trong trường hợp này tôi sẽ cố gắng một cái gì đó như thế này:

UPDATE T 
SET T.FERMENTID = A.FERMENTID 
FROM EXAMPLETABLE AS T 
     INNER JOIN (SELECT FERMENT.FERMENTID, 
          FERMENT.OTHERID 
        FROM FERMENT 
          INNER JOIN [BELGIUM BEER] 
            ON FERMENT.FERMENTNAME = 
            [BELGIUM BEER].FERMENTID 
        ORDER BY [BELGIUM BEER].BEERID) AS A 
       ON A.OTHERID = T.OTHERID 

Nếu đây không phải là trường hợp và các phụ truy vấn trả về một giá trị duy nhất, hãy thử một cái gì đó như thế này:

UPDATE EXAMPLETABLE 
SET T.FERMENTID = (SELECT FERMENT.FERMENTID 
         FROM FERMENT 
          INNER JOIN [BELGIUM BEER] 
            ON FERMENT.FERMENTNAME = 
             [BELGIUM BEER].FERMENTID 
         ORDER BY [BELGIUM BEER].BEERID) 

Lưu ý rằng trong trường hợp này, bạn cần đảm bảo rằng truy vấn phụ sẽ không bao giờ trả về nhiều hơn một hàng!

+1

Lol, tôi vừa viết rằng trong một bình luận, dù ít lời. Bạn đã nhận được phiếu bầu của tôi! – xception

+0

Bạn có nghĩa là cột hoặc bản ghi có hàng không? – user1534664

+0

Hàng! Nếu truy vấn con trả về nhiều hàng, SQL sẽ không biết giá trị nào cần cập nhật bảng. :-) – Gidil

15

Không chắc chắn về mối quan hệ của EXAMPLETABLE với dữ liệu của bạn, nhưng nói chung.

Khi truy cập phần SET là sau khi tham gia, cũng bỏ qua phần lựa chọn vi theo thứ tự. nên được một cái gì đó như thế này

UPDATE FERMENT 
INNER JOIN ([BELGIUM BEER] ON FERMENT.FermentName = [BELGIUM BEER].FermentId) 
SET EXAMPLETABLE.FermentColumn = a.FermentColumn 

Nếu nó doent việc cố gắng xây dựng tham gia vào xây dựng truy vấn

3

Không cần xác định mối quan hệ giữa hai bảng. Câu trả lời 10 (Arnoldiusss) gần như chính xác và đến nay là giải pháp dễ hiểu nhất và ngắn nhất. Và nhanh nhất trong thực hiện. Nhưng mã ví dụ là sai. Các mã tiếp theo đến từ một trong những ứng dụng của tôi và chạy tốt trong MS Access 2013.

UPDATE table1 T1 
    INNER JOIN table2 T2 
    ON T2.Id = T1.Id 
    SET T1.myField = T2.myField; 

Đối với "Case Bia Bỉ" (Tôi thích điều đó biểu hiện ;-) nó sẽ là:

UPDATE FERMENT AS T1 
    INNER JOIN [BELGIUM BEER] AS T2 ON T1.FermentName = T2.FermentId 
    SET T1.FermentColumn1 = T2.FermentColumn1; 
Các vấn đề liên quan