简体   繁体   中英

Update column in one table for a user based on count of records in another table for same user without using cursor

I have 2 tables A and B. I need to update a column in table A for all userid's based on the count of records that userid has in another table based on defined rules. If count of records in another table is 3 and is required for that userID, then mark IsCorrect as 1 else 0, if count is 2 and required is 5 then IsCorrect as 0 For eg Below is what I am trying to achieve

Table A

UserID |  Required  |  IsCorrect
----------------------------------
1      |     SO;GO;PE       |     1
2      |     SO;GO;PE;PR       |     0
3      |     SO;GO;PE       |     1

Table B

UserID  |  PPName
-----------------------   
1     |     SO
1     |     GO
1     |     PE
2     |     SO
2     |     GO
3     |     SO
3     |     GO
3     |     PE  

I tried using Update in table joining another table, but cannot up with one. Also, do not want to use cursors, because of its overhead. I know I will have to create a stored Procedure for it for the rules, but how to pass the userID's to it without cursor is what am i am looking for.

Thanks for the help. Apologies for not formatting the table correctly :)

THIS ANSWERS THE ORIGINAL QUESTION.

Hmmm, you can use a correlated subquery and some case logic:

update a
    set iscorrect = (case when required <=
                               (select count(*) from b where b.userid = a.userid)
                          then 1 else 0
                     end);
update A
set IsCorrect = case
    when Required <= (select count(*) from B where b.UserID = A.UserID)
    then 'Y' -- or 0, or whatever sense is appropriate
    else 'N'
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM