SQL UPDATE SELECT cu WHERE (Programare, Sql, Server Sql, Selectează, Unde)

user1673665 a intrebat.

Vreau să UPDATE o coloană într-un tabel, dar în fiecare rând trebuie să apară o altă valoare care să depindă de o valoare WHERE din alt rând.

Iată cum arată tabelul.

BusinessUnitGUID | ClassName | DefaultGUID

    5        | PriceList | 349FDAFD34M
    5        | Footer1   | 987IOXG376L
    5        | Header1   | 12WQX954MIO
    7        | PriceList | NULL
    7        | Footer1   | NULL
    7        | Header1   | NULL

Rezultatele ar trebui să fie următoarele.

BusinessUnitGUID | ClassName | DefaultGUID

    5        | PriceList | 349FDAFD34M
    5        | Footer1   | 987IOXG376L
    5        | Header1   | 12WQX954MIO
    7        | PriceList | 349FDAFD34M
    7        | Footer1   | 987IOXG376L
    7        | Header1   | 12WQX954MIO

Dar această interogare prezentată nu funcționează, deoarece returnează multe rânduri și, prin urmare, nu este precisă.

update cSC_BusinessUnit
set defaultguid =
    (
    select defaultguid
    from cSC_BusinessUnit 
    where BusinessUnitGUID = 5
    )
where BusinessUnitGUID = 7

6 răspunsuri
waka

Trebuie să faceți o verificare și pe ClassName:

update b1
set b1.defaultguid =
    (
    select b2.defaultguid
    from cSC_BusinessUnit b2
    where b2.BusinessUnitGUID = 5
        AND b2.ClassName = b1.ClassName
    )
from cSC_BusinessUnit b1
where b1.BusinessUnitGUID = 7

Aman Prajapati

Utilizați și versiunea scurtă de mai jos

UPDATE  b1
SET     b1.defaultguid = b2.defaultguid
FROM    cSC_BusinessUnit b1
        JOIN
        cSC_BusinessUnit b2
            ON b1.ClassName = b2.ClassName
                And b2.BusinessUnitGUID = 5
WHERE   b1.BusinessUnitGUID = 7

user2877959

Aceasta vă rezolvă problema?

update cSC_BusinessUnit t1
set defaultguid =
    (
    select defaultguid
    from cSC_BusinessUnit t2
    where t2.BusinessUnitGUID = 5
    and t1.classname = t2.classname
    )
where BusinessUnitGUID = 7

Comentarii

  • el folosește SQL Server, nu Oracle –  > Por Radim Bača.
Misery

De asemenea, puteți seta în mod dinamic toate coloanele NULL astfel, atâta timp cât aveți o singură ocurență de ClassName NOT NULL

update A
set DefaultGUID =
    (
        select B.DefaultGUID
        from cSC_BusinessUnit B
        where B.ClassName = A.ClassName
        And B.DefaultGUID IS NOT NULL
    )
from cSC_BusinessUnit A

Comentarii

  • se pot produce erori dacă există mai multe apariții NOT NULL pentru ClassName -.  > Por Radim Bača.
  • Într-adevăr, această interogare este valabilă numai într-un context în care o singură apariție a ClassName are un DefaultGUID NOT NULL –  > Por Misery.
Hung Le

Puteți încerca

update cSC_BusinessUnit a
set a.defaultguid =
    (
    select defaultguid
    from cSC_BusinessUnit b
    where b.BusinessUnitGUID = 5 and b.ClassName = a.ClassName
    )
where a.BusinessUnitGUID = 7

Comentarii

  • OP utilizează SQL-server/T-SQL, deci update cSC_BusinessUnit a este greșit. Consultați răspunsul acceptat pentru sintaxa corectă pentru T-SQL. –  > Por waka.
  • Eu o fac cu pl/sql, dar cred că ideea mea va folosi pentru această problemă. mulțumesc u –  > Por Hung Le.
Vijay dubey
update b1
set b1.defaultguid =
    (
    select b2.defaultguid
    from cSC_BusinessUnit b2
    where b2.BusinessUnitGUID = 5
        AND b2.ClassName = b1.ClassName
    )
from cSC_BusinessUnit b1
where b1.BusinessUnitGUID = 7