Update data from one table from others but only to specific users

1

I am trying to update a table and in the condition I am making two subqueries to validate that the data exists.

If I run my queries separately, it shows me the following:

SELECT m.id AS membersid, m.name AS username, s.name AS skillname
    FROM skill s 
    INNER JOIN skill_rel_user sru ON s.id=sru.skill_id
    INNER JOIN user u ON u.id=sru.user_id
    INNER JOIN sm4rtuniversity.members m ON m.email=u.email
    INNER JOIN sm4rtuniversity.badges b ON b.name=s.name

And the second one is this:

    SELECT b.id AS badgeid, b.name AS badgename 
FROM skill s 
INNER JOIN skill_rel_user sru ON s.id=sru.skill_id 
INNER JOIN user u ON u.id=sru.user_id 
INNER JOIN sm4rtuniversity.members m ON m.email=u.email 
INNER JOIN sm4rtuniversity.badges b ON b.name=s.name

And it shows me the following results

The UPDATE to update the table is as follows:

UPDATE sm4rtuniversity.badges_members SET active = 'si'
WHERE user_id IN (SELECT m.id
        FROM skill s 
        INNER JOIN skill_rel_user sru ON s.id=sru.skill_id
        INNER JOIN user u ON u.id=sru.user_id
        INNER JOIN sm4rtuniversity.members m ON m.email=u.email
        INNER JOIN sm4rtuniversity.badges b ON b.name=s.name)
AND badge_id IN (SELECT b.id
        FROM skill s 
        INNER JOIN skill_rel_user sru ON s.id=sru.skill_id
        INNER JOIN user u ON u.id=sru.user_id
        INNER JOIN sm4rtuniversity.members m ON m.email=u.email
        INNER JOIN sm4rtuniversity.badges b ON b.name=s.name)

The UPDATE does update the data, but the problem is that it shows 9 affected rows, as if the 3 users had the 3 assigned competences, but no. User 102516 has 3, user 102332 has 2, and user 102265 has only 1. Then UPDATE would have to return only 6 affected rows. Does anyone have an idea of how to do it?

    
asked by Guillermo Ricardo Spindola Bri 11.05.2018 в 19:01
source

0 answers