2016-05-04 6 views
0

Ich habe 2 Tabellen.Wie UPDATE COLUMN mit einer Bedingung aus einer anderen Tabelle in SQL?

tabelle1

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

Tabelle 2

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


Ich möchte DISCOUNT in table 2 aktualisieren basierend auf RANGE und PERCENTAGE von table 1

KATEGORIE REG

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


KATEGORIE 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

Anwendungsfall wann zu tun. – Kason

+0

ist dies für 'MySQL' oder' SQL Server'? – Squirrel

+0

mysql Werkbank: D – ZoHaN

Antwort

0

unten Abfrage nach Kategorie Try ‚R Z.B'. Sie können ändern, wo Kategorie und Bedingung in WHEN-Klausel gemäß Ihrer Anforderung.

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' 

prüfen aktualisiert Abfrage für die Kategorie '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' 

prüfen mit unter query (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) 

sicher Bereichsspalte Stellen zitiert, weil Bereich a MYSQL reserviertes Schlüsselwort. Beachten Sie auch, dass der Datentyp der Bereichsspalte Integer sein sollte.

+0

PERCENTAGE sollte in Tabelle1 erhalten werden. nicht "codiert hart" tun, wie Sie – ZoHaN

+0

könnte: = UPDATE table2 SET Rabatt (SELECT CASE WENN Preis <= 250001 DANN ((Preis * a.percentage)/100) ELSE Rabatt END FROM table1 als Wo ein.Bereich = 250001) WHERE Kategorie = 'REG' –

+0

@ZoHaNCheck aktualisierte Abfrage in meiner Antwort. Sie müssen CATEGORY von 'REG' in 'VIP' ändern, um VIP-Kategorie-Rabatte zu aktualisieren. –

1

Try this:

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

Ich muss Tabelle2 aktualisieren, indem Sie den Prozentsatz in Tabelle1 abrufen. – ZoHaN

+0

Also, was ist der 'Datentyp' für die Spalte 'Prozentsatz'? – wajeeh

+0

dezimal. Ja, es sollte in 100 geteilt und mit dem PREIS multipliziert werden, aber PERCENTAGE sollte von table1 kommen. – ZoHaN

Verwandte Themen