2011-09-15 27 views
40

Tôi có một tableA:Máy chủ SQL: NẾU CÓ; ELSE

ID value 
1 100 
2 101 
2 444 
3 501 

Cũng TableB

ID Code 
1 
2 

Bây giờ tôi muốn cư col = mã của bảng B nếu có tồn tại ID = 2 trong tableA. cho nhiều giá trị, nhận giá trị tối đa. người khác cư trú với '123'. Bây giờ, đây là những gì tôi đã sử dụng:

if exists (select MAX(value) from #A where id = 2) 
BEGIN 
update #B 
set code = (select MAX(value) from #A where id = 2) 
from #A 
END 

ELSE 

update #B 
set code = 123 
from #B 

Tôi chắc chắn có một số vấn đề trong BEGIN; END hoặc trong IF EXIST; ELSE. Về cơ bản, tôi muốn bỏ qua phần còn lại nếu câu lệnh chọn trong phần IF tồn tại và ngược lại. Ví dụ: nếu tuyên bố chọn của IF = một phần là:

(select MAX(value) from #A where id = 4) 

Chỉ nên điền 123, coz ID = 4 không tồn tại! Hãy giáo dục! Cảm ơn trước

Trả lời

65

EDIT

Tôi muốn thêm lý do rằng tuyên bố IF của bạn dường như không làm việc. Khi bạn thực hiện một tổng hợp EXISTS, nó sẽ luôn là true. Nó trả về một giá trị ngay cả khi ID không tồn tại. Chắc chắn, nó là NULL, nhưng nó trả lại nó. Thay vào đó, làm điều này:

if exists(select 1 from table where id = 4) 

và bạn sẽ nhận được phần ELSE của tuyên bố IF của bạn.


Bây giờ, đây là một tốt hơn, giải pháp thiết lập dựa trên:

update b 
    set code = isnull(a.value, 123) 
from #b b 
left join (select id, max(value) from #a group by id) a 
    on b.id = a.id 
where 
    b.id = yourid 

này có lợi ích của việc có thể chạy trên toàn bộ bảng chứ không phải là id cá nhân.

5

Hãy thử điều này:

Update TableB Set 
    Code = Coalesce(
    (Select Max(Value) 
    From TableA 
    Where Id = b.Id), 123) 
From TableB b