2011-08-23 39 views
5

Đây là Select tôi cần phải chuyển đổi sang một Cập nhật:Sử dụng biệt trong SQL Cập nhật

SELECT DISTINCT f.SectionID, f.Name, v.Enabled 
FROM SETTING_VALUE v 
INNER JOIN SETTING s ON v.SettingID = s.SettingID 
INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID 
WHERE v.DisplayValue LIKE '%Miami%' 
AND f.ControlName LIKE '%City%' 

nỗ lực của tôi:

UPDATE SETTING_VALUE 
SET Enabled = 0 
FROM SETTING_VALUE v 
INNER JOIN SETTING s ON v.SettingID = s.SettingID 
INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID 
WHERE v.DisplayValue LIKE '%Miami%' 
AND f.ControlName LIKE '%City%' 

Không chắc làm thế nào để áp dụng riêng biệt

+0

Đây là SQL Server? – Yuck

+1

Bạn có ý gì khi 'cập nhật riêng biệt'? Bạn có thể hiển thị cho chúng tôi dữ liệu trước và sau khi cập nhật không? –

+3

Làm việc tốt bằng cách sử dụng 'SELECT' để xem dữ liệu trước khi bạn cập nhật. Tôi không biết tại sao bạn lại muốn sử dụng phép chiếu 'DISTINCT'. Không phải tất cả các hàng phù hợp sẽ được cập nhật? Tôi không thấy làm thế nào 'DISTINCT' sẽ có ý nghĩa hợp lý. – Yuck

Trả lời

8

Dựa trên nhận xét của bạn, all of the matching rows should be updated bạn không cần phải phân biệt. Chỉ cần thực hiện điều này:

UPDATE SETTING_VALUE 
SET Enabled = 0 
FROM SETTING_VALUE v 
INNER JOIN SETTING s ON v.SettingID = s.SettingID 
INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID 
WHERE v.DisplayValue LIKE '%Miami%' 
AND f.ControlName LIKE '%City%' 

Tất cả những gì bạn đã thấy trong lựa chọn của bạn sẽ được cập nhật.

+0

Nhưng nó sẽ cập nhật các hàng nhiều lần một lần? – xr280xr

0

Bạn có thể thử sau đây

UPDATE v 
SET Enabled = 0 
FROM SETTING_VALUE v 
WHERE EXISTS(
    select * from SETTING s 
    INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID 
    WHERE v.DisplayValue LIKE '%Miami%' 
    AND f.ControlName LIKE '%City%' 
    AND v.SettingID = s.SettingID 
) 
2

O ption 1: Sử dụng bảng tạm thời để giữ kết quả truy vấn ban đầu của bạn, sau đó cập nhật dựa trên kết quả truy vấn.

Phương án 2:

Insert into SETTING_VALUE 
(SectionID, Name, Enabled) 
SELECT DISTINCT f.SectionID, f.Name, v.Enabled 
FROM SETTING_VALUE v 
INNER JOIN SETTING s ON v.SettingID = s.SettingID 
INNER JOIN LU_FIELD f ON f.FieldID = s.FieldID 
WHERE v.DisplayValue LIKE '%Miami%' 
AND f.ControlName LIKE '%City%' 
1
UPDATE SETTING_VALUE 
    SET Enabled = 0 
WHERE DisplayValue LIKE '%Miami%' 
     AND EXISTS (
        SELECT * 
        FROM SETTING s 
        WHERE SETTING_VALUE.SettingID = s.SettingID 
          AND EXISTS (
             SELECT * 
             FROM LU_FIELD f 
             WHERE f.FieldID = s.FieldID 
              AND f.ControlName LIKE '%City%' 
            ) 
       ); 
Các vấn đề liên quan