SELECT нәтижелерімен SQL жаңарту

Менде көптеген пайдаланушылар үшін TotalNetWorth есептеулерін орындайтын ауқымды SQL SELECT бар. Нәтиже - TotalNetworth және User. Бұл бірнеше жазбаларды қамтуы мүмкін. Мысал:

-------------------------
|TotalNetWorth | UserId |
-------------------------
|  24.45       |  1     |
|  45.34       |  3     |
-------------------------

TotalNetWorth және UserId = Users кестесінде NetWorth бағанын жаңартуды қалаймын. Кілт ретінде Users.Id . Бұл туралы не істеудің ең жақсы жолы бар?

4
Дерекқор сервері қандай? Жауап әртүрлі болуы мүмкін; SQL Server, мысалы, CTE бар, онда MySQL жоқ.
қосылды автор Ken White, көзі
@KenWhite бұл өзгеріс деп ойламады. MySQL тегімен жаңартылдым.
қосылды автор xdumaine, көзі

6 жауаптар

JOIN қолдануға болады.

UPDATE 
  Users
FROM 
  Users u 
INNER JOIN 
 (SELECT WhatEver FROM YourQueryThatCalcsNetWorth) nw 
ON 
  nw.UserID = u.UserId
4
қосылды
Мен оны тексеремін және FROM Users U бөлімінен қате аламын. Бұл бөлімді жою сұрауды жұмыс істеуіне әкеледі.
қосылды автор SAMPro, көзі

алдымен таңдауыңызды жасаңыз, содан кейін cte help арқылы дереу жаңартыңыз

WITH cte_query AS (
    SELECT TotalNetWorth = 
    FROM [Users])
UPDATE cte_query
SET TotalNetWorth = TotalNetWorth;
1
қосылды
btw, ол 2005 жылы жұмыс істейді және одан жоғары
қосылды автор Kris Ivanov, көзі
CREATE TEMPORARY TABLE TempNetWorth AS (SELECT * FROM [your query])

UPDATE Users u, TempNetWorth t
SET u.NetWorth = t.TotalNetWorth
WHERE u.UserID = t.UserId
1
қосылды
Бұл жерде уақытша кесте қажет емес. Жалғастырушы подсвеченке қарапайым қосылу бірден жұмыс істейді. (Назар аударыңыз, мен жай ғана түсініктеме беремін.)
қосылды автор Ken White, көзі
@KenWhite Бұл жұмыс істеді! Жауап беріңіз!
қосылды автор xdumaine, көзі

Осындай нәрсе

UPDATE u
FROM Users u 
JOIN tableTotalNetWorth t ON t.UserID = u.UserId
1
қосылды

INSERT .... SELECT .... DUPLICATE UPDATE UPDATE .... параметрін қолдануға болады, бұл түсіндірілгендей мұнда .

0
қосылды

Алдымен уақытша кестеге деректерді алу үшін «temp» деп айтыңыз және осы сұрақты қолданып көріңіз: кең SELECT сұрауын қолдануыңыз қажет болуы мүмкін:

Update Users set NetWorth = (select TotalNetWorth from temp where Users.Id = temp.UserId)
0
қосылды
Жоқ уақытша кесте қажет емес. Ішкі сұрауды жасай аласыз және тікелей INNER JOIN жасай аласыз.
қосылды автор Ken White, көзі