sql >> Database >  >> RDS >> Sqlserver

Hoe de gegevens van de ene kolom in een andere tabel invoegen?

De reden dat u deze foutmelding krijgt, is omdat admin_id is niet NULLABLE wat betekent dat je moet een admin_id . hebben voor elke rij. Wanneer u een INSERT . uitvoert je moet expliciet de admin_id . invoegen aangezien het geen IDENTITY . is kolom eigendom.

Uit uw verwachte resultaten blijkt dat u een UPDATE . wilt doen , geen INSERT . Een UPDATE zou UPDATE de admin_id momenteel in uw table_admin tabel in plaats van nieuwe rijen in te voegen. Het enige dat onduidelijk is, is hoe de table_admin heeft betrekking op table_information . Hoe krijgt John admin_id = 1 . toegewezen? ?

Als je dat eenmaal hebt gedefinieerd, is hier de UPDATE

update t 
set t.admin_name = i.admin_name
from table_admin t
inner join table_information i on i.someColumn = t.someColumn

Als het je niet uitmaakt welke admin_name krijgt wat admin_id , dan kunt u een surrogaatsleutel maken en uw tabel bijwerken. Het zou er zo uitzien:

select distinct 
    admin_name
    ,admin_id = row_number() over (order by (select null))
into #tempInformation
from table_information

--this is going to show the admin_id that will be updated in the table_admin table
select * from #tempInformation

update t 
set t.admin_name = i.admin_name
from table_admin t
inner join #tempInformation i on i.admin_id = t.admin_id

BEWERKEN

Als u geen . heeft admin_name momenteel ingevuld in de table_admin dan raad ik je aan die tabel af te kappen en je eigen admin_name in te voegen . Nogmaals, ik zou ook admin_id . maken een identiteitseigenschap

truncate table table_admin

insert into table_admin (admin_id, admin_name)
   select distinct 
        admin_id = row_number() over (order by (select null))
        ,admin_name

Ik moet benadrukken dat in de meeste schema's de admin_id iets zou betekenen. Het zou een PRIMARY KEY . zijn voor deze tabel en worden gebruikt om deze tabel te relateren aan andere in de database. Dus, niet wetende welke admin_id gaat naar welke admin_name betekent dat je een echte puinhoop in je handen hebt en ze willekeurig toewijst zou stroomafwaartse processen doorbreken... maar dat is misschien niet het geval, aangezien u het in het begin niet hebt bijgehouden.

Ik zou vragen waarom? Dit zou erop duiden dat je een toewijzing hebt van de admin_name naar admin_id al... maar dat heb je niet laten zien.




  1. Bestandsnaam in de WHERE-component van Mysql geeft niets terug

  2. REGEX om de n-de waarde uit een lijst te selecteren, waarbij nulls worden toegestaan

  3. Garandeert postgres union de volgorde van uitvoering bij het aanroepen van functies met bijwerkingen?

  4. mysql kapt geheel getal af tot een vreemd getal bij zoeken en invoegen