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?