Skopiuj dane z jednej kolumny do drugiej (która znajduje się w innej tabeli)


89

Chcę skopiować dane z jednej kolumny do innej kolumny innej tabeli. Jak mogę to zrobić?

Próbowałem następujących rzeczy:

Update tblindiantime Set CountryName =(Select contacts.BusinessCountry From contacts) 

ale to nie zadziałało.

Chcę skopiować kolumnę „BusinessCountry” tabeli kontaktów do kolumny „CountryName” tabeli tblindiantime.


1
Aby skopiować kolumny z jednej tabeli do drugiej, potrzebujesz pewnego rodzaju relacji między tabelami. Czy te dwie tabele mają wspólny identyfikator?
mdma

1
Której bazy danych i wersji używasz?
Mark Byers

Odpowiedzi:


89

W SQL Server 2008 można użyć aktualizacji wielotabelowej w następujący sposób:

UPDATE tblindiantime 
SET tblindiantime.CountryName = contacts.BusinessCountry
FROM tblindiantime 
JOIN contacts
ON -- join condition here

Potrzebujesz warunku łączenia, aby określić, który wiersz powinien zostać zaktualizowany.

Jeśli tabela docelowa jest obecnie pusta, powinieneś zamiast tego użyć INSERT:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts

1
Cześć dziękuję za przedstawiciela ur, ale pokazuje mi następujący błąd Nie można wstawić wartości NULL do kolumny „IndianTime”, tabeli „tqms.dbo.tblindiantime”; kolumna nie zezwala na wartości null. INSERT nie powiodło się. Oświadczenie zostało zakończone.
Amit Patil

2
@AmitPatil - wiem, że to jest stare, ale może pomóc komuś takiemu jak ty. Użyj ISNULL (kontakty.BusinessCountry, '') zamiast po prostu contacts.BusinessCountry i powinno rozwiązać Twój problem. Zasadniczo zastępujemy null pustym ciągiem.
Ankur-m,

1
Ponieważ ten przykład nie pokazuje, co „warunku złączenia” może być również zobaczyć odpowiedź Michaela Pakhantsov, a odpowiedź cedrikdlb za , a odpowiedź Parveen do podobnych pytanie, gdzie dwie kolumny należy porównać, aby wybrać poprawny wiersz .
ToolmakerSteve

152

Tutaj zapytanie:

Ta sama tabela:

UPDATE table_name 
SET column1 = column2

Inny stół:

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );

13
Myli się w kontekście pytania, gdzie pytający dotyczy konkretnie 2 tabel.
bPratik

2
Jego działanie dla mysql w przypadku kolumn dotyczy tej samej tabeli.
Satish Pandey,

11
To jednak rozwiązuje mój problem i przeszedłem tutaj przez tytuł pytania, który prawdopodobnie bardziej pasuje do tej odpowiedzi niż do szczegółów w pytaniu!
Rob Grant

6
Ta odpowiedź odpowiada raczej tytułowi pytania niż samemu pytaniu. Mimo to uznałem to za przydatne w tym, co próbowałem zrobić.
wizard07KSU

1
to jest doskonała odpowiedź; pomogło mi to skopiować tylko jedną kolumnę z kopii zapasowej do głównej tabeli!
Zelter Ady,

22

Table2.Column2 => Table1.Column1

Zdaję sobie sprawę, że to pytanie jest stare, ale zaakceptowana odpowiedź nie zadziałała. W przypadku przyszłych pracowników Google to zadziałało:

UPDATE table1 
    SET column1 = (
        SELECT column2
        FROM table2
        WHERE table2.id = table1.id
    );

W wyniku czego:

  • table1 = tabela zawierająca kolumnę, która ma zostać zaktualizowana
  • table2 = tabela zawierająca kolumnę z danymi
  • kolumna1 = pusta kolumna, która wymaga danych z kolumny2 (to jest w tabeli 1)
  • kolumna2 = kolumna zawierająca dane (to jest w tabeli2)

1
Pracował dla mnie - ale jest taki sam jak odpowiedź powyżej[Michael Pakhantsov]
Don Cheadle

3
Masz rację, @mmcra, że ​​teraz jest to to samo, co odpowiedź powyżej. Jednak nie było to to samo, kiedy pisałem ten komentarz. Zauważysz, że był edytowany we wrześniu, a błędy zostały naprawione. Napisałem ten komentarz w czerwcu.
Kenny Grage

16

Mam nadzieję, że masz pole klucza to dwie tabele.

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )

1
jest to ważne tylko wtedy, gdy zastąpisz jedno pole innym polem, które zostanie wyrzucone, ORA-01427: single-row subquery returns more than one rowjeśli select zwróci więcej niż jeden wiersz, co jeśli chcę wybrać więcej niż jeden wiersz i zaktualizować kolumnę tymi wartościami?
Muhammad Ramahy

3
@Muhammad Ramahy, czy masz zagnieżdżoną tabelę w kolumnie aktualizacji? w podzapytaniu zwraca kilka wierszy, a następnie klucz nie jest kluczem podstawowym dla tabeli kontaktów. Jeśli masz złożony klucz podstawowy, potrzebujesz tylko warunków do klauzuli WHERE.
Michael Pakhantsov

1
Nie rozumiem, co masz na myśli mówiąc „Mam nadzieję, że kluczem są dwa stoły”
Marco Lackovic

2
@Krige - Najwyraźniej ma na myśli „Jeśli dwie tabele mają wspólne pole klucza, aby określić, który wiersz każdej tabeli pasuje do wiersza innej tabeli” . Jeśli tego nie zrobisz, musisz zmienić to, co jest później WHERE. Na przykład, jeśli tblindiantime ma pole ContactID, które jest IDwierszem, do contactsktórego należy każdy wiersz w tblindiantime, należy użyć WHERE tblindiantime.ContactID=contacts.ID. Zobacz odpowiedź cedrikdlb na inną odmianę.
ToolmakerSteve

8

Odpowiedź podobnego pytania zadziałała dla mnie bardziej poprawnie niż wybrana odpowiedź na to pytanie (autorstwa Marka Byersa). Korzystając z odpowiedzi Marka, moja zaktualizowana kolumna otrzymała tę samą wartość we wszystkich wierszach (być może wartość z pierwszego wiersza, który pasował do sprzężenia). Użycie odpowiedzi ParveenaArora z innego wątku zaktualizowało kolumnę poprawnymi wartościami.

Przekształcając rozwiązanie Parveeny, aby używać nazw tabel i kolumn tego pytania, zapytanie wyglądałoby następująco (gdzie zakładam, że tabele są powiązane przez tblindiantime.contact_id):

UPDATE tblindiantime
SET CountryName = contacts.BusinessCountry
FROM contacts
WHERE tblindiantime.contact_id = contacts.id;

3

Myślę, że wszystkie poprzednie odpowiedzi są poprawne, poniższy kod jest bardzo ważny, szczególnie jeśli musisz zaktualizować wiele wierszy na raz, uwaga: to PL / SQL

DECLARE
    CURSOR myCursor IS 
      Select contacts.BusinessCountry 
      From contacts c WHERE c.Key = t.Key;
    ---------------------------------------------------------------------
BEGIN
    FOR resultValue IN myCursor LOOP
        Update tblindiantime t
        Set CountryName=resultValue.BusinessCountry 
        where t.key=resultValue.key;
    END LOOP;
END;

Chciałbym, żeby to pomogło.


2

Teraz jest łatwiej z Management Studio 2016.

Korzystanie z programu SQL Server Management Studio

Aby skopiować dane z jednej tabeli do drugiej

1. Otwórz tabelę z kolumnami, które chcesz skopiować, i tę, do której chcesz skopiować, klikając tabele prawym przyciskiem myszy, a następnie klikając polecenie Projektuj .

2. Kliknij kartę tabeli z kolumnami, które chcesz skopiować, i wybierz te kolumny.

3. W menu Edycja kliknij Kopiuj .

4. Otwórz nowe okno Edytora zapytań.

5. Kliknij prawym przyciskiem myszy Query Editor, a następnie kliknij Design Query w Edytorze .

6. w oknie dialogowym Dodaj tabelę wybierz tabelę źródłową i docelową, kliknij przycisk Dodaj , a następnie zamknij okno dialogowe Dodaj tabelę .

7. Kliknij prawym przyciskiem myszy otwarty obszar Edytora zapytań, wskaż polecenie Zmień typ , a następnie kliknij polecenie Wstaw wyniki .

8. w oknie dialogowym Wybierz tabelę docelową dla wyników wstawiania wybierz tabelę docelową.

9. W górnej części projektanta zapytań kliknij kolumnę źródłową w tabeli źródłowej.

10. Projektant zapytań utworzył teraz zapytanie INSERT. Kliknij przycisk OK, aby umieścić zapytanie w oryginalnym oknie Edytora zapytań.

11. Wykonaj zapytanie, aby wstawić dane z tabeli źródłowej do tabeli docelowej.

Aby uzyskać więcej informacji, https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine


1

Można to rozwiązać, używając innego atrybutu.

  • Użyj zdarzenia kliknięcia Control komórki.
  • Wybierz wartość kolumny, którą transponujesz do innej kolumny.
  • wyślij wybraną wartość do innego pola tekstowego lub poziomu, cokolwiek wypełnisz, wygodny i uzupełniający przycisk do modyfikacji wybranej właściwości.
  • zaktualizuj cały stos w bazie danych i utwórz algorytm z zapytaniem sql, aby przezwyciężyć ten i przetransponować go do innej kolumny.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.