2016-05-04 3 views
0

У меня есть 2 стола.Как обновить COLUMN с условием из другой таблицы в SQL?

table1

CATEGORY | RANGE | PERCENTAGE 
REG  | 250001 | 50 
REG  | 500001 | 40 
REG  | 9999999 | 30 
VIP  | 5001  | 50 
VIP  | 10001 | 40 
VIP  | 9999999 | 30 

таблица 2

CATEGORY | PRICE | DISCOUNT 
REG  | 100000 | 0 
REG  | 400000 | 0 
REG  | 600000 | 0 
VIP  | 3000  | 0 
VIP  | 6000  | 0 
VIP  | 120000 | 0 


Я хотел бы обновить DISCOUNT в table 2, основываясь на RANGE и PERCENTAGE от table 1

КАТЕГОРИЯ REG

WHEN PRICE is <= 250001 
DISCOUNT = PRICE * 50% 
WHEN PRICE is > 250001 AND <= 500001 
DISCOUNT = PRICE * 40% 
WHEN PRICE is > 500001 
DISCOUNT = PRICE * 30% 


КАТЕГОРИЯ VIP

WHEN PRICE is <= 5001 
DISCOUNT = PRICE * 50% 
WHEN PRICE is > 10001 AND <= 500001 
DISCOUNT = PRICE * 40% 
WHEN PRICE is > 100001 
DISCOUNT = PRICE * 30% 
+1

Use case когда делать. – Kason

+0

это для MySQL или SQL Server? – Squirrel

+0

mysql workbench: D – ZoHaN

ответ

0

Попробуйте ниже запрос для категории «R НАПРИМЕР'. Вы можете изменить категорию и условие в предложении WHEN согласно вашему требованию.

UPDATE table2 
SET discount = CASE 
    WHEN price <= 250001 THEN ((price*50)/100) 
    WHEN (price BETWEEN 250002 AND 500001) THEN ((price*40)/100) 
    WHEN price > 500001 THEN ((price*30)/100) 
    ELSE discount 
END 
WHERE category = 'REG' 

Проверить обновленный запрос для категории 'REG':

UPDATE table2 SET discount = 
(SELECT ((price*a.percentage)/100) FROM table1 as a WHERE price <= a.range AND category='REG' LIMIT 1) 
WHERE category = 'REG' 

Проверка с ниже запроса (Edit # 2):

UPDATE table2 AS b SET discount = 
(SELECT ((b.price*a.percentage)/100) FROM table1 as a WHERE a.range >= b.price AND a.category=b.category LIMIT 1) 

Убедитесь, что столбец диапазона котируется, потому что диапазон является Зарезервированное ключевое слово MYSQL. Также обратите внимание, что тип данных столбца диапазона должен быть целым.

+0

PERCENTAGE следует получить в таблице 1. не "жестко" – ZoHaN

+0

Вы могли бы сделать так: UPDATE table2 SET скидка = (SELECT CASE, , когда цена <= 250001 ТОГДА ((цена * a.percentage)/100) ELSE скидка END FROM table1 в виде Где.range = 250001) WHERE category = 'REG' –

+0

@ZoHaNПроверьте обновленный запрос в моем ответе. Вам нужно изменить CATEGORY с «REG» на «VIP», чтобы обновлять скидки в категории категории. –

1

Попробуйте это:

UPDATE table2 t2 SET 
DISCOUNT = (
    SELECT max(t1.`percentage`) * t2.price/100 FROM table1 t1 
    WHERE 
     t1.category = t2.category AND 
     t2.price < t1.`range` 
) 
+0

Мне нужно обновить таблицу2, получив процент в таблице1. – ZoHaN

+0

Итак, что такое 'тип данных' для столбца' percent'? – wajeeh

+0

десятичный. да, его следует разделить на 100 и умножить на ЦЕНУ, но PERCENTAGE следует получить из таблицы 1. – ZoHaN

Смежные вопросы