Есть ли более быстрая альтернатива для вставки в X (выберите Y, где Z) в mysql? - PullRequest
0 голосов
/ 31 марта 2020
table_a

user_id  score  
1        10     
2        10      
3        10      
5        43      
6        43      
9        20      
10       42    



table_b

user_id  flag
1        0
2        0
3        0
4        1
5        1
6        0 
7        1

В вышеприведенном случае, как я могу заполнить table_b.flag до 1, если user_id из table_a имеет (score > 40)?

1 Ответ

0 голосов
/ 31 марта 2020

Вы можете использовать мульти-таблицу UPDATE для получения желаемых результатов:

UPDATE table_b b
JOIN table_a a ON a.user_id = b.user_id AND a.score > 40
SET b.flag = 1

Условие JOIN означает, что только строки в table_b, где соответствующие user_id in table_a имеет score > 40, для которого установлен флаг 1. Если вы также хотите установить флаги на 0, если соответствующий score <= 40, вы можете использовать условие в качестве значения на SET (поскольку MySQL трактует логические значения как 1 или 0 в цифре c context):

UPDATE table_b b
JOIN table_a a ON a.user_id = b.user_id
SET b.flag = a.score > 40

Для ваших примеров данных результат в table_b такой же:

user_id     flag
1           0
2           0
3           0
4           1
5           1
6           1
7           1

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...