Kopiowanie wartości z jednej tabeli do drugiej

Kopiowanie wartości z jednej tabeli do drugiej
SH
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 lata
  • Postów:152
0

Witam, nie wiem jak sobie z tym poradzić.
Korzystam z HediSQL więc powinno być w miarę wygodnie, jednak i tak mam problem.

Mam bazę danych o nazwie "test"m która posiada dwie tabele.

-test
-- tab1 (id_kol, kolor, tlo)
-- tab2 (id_kol, ilosc, kolor, tlo, wymiar)

Chciałbym do tab1(kolor) wprowadzić wszystkie wartości tab2(kolor) przy sprawdzeniu, że tab1(id_kol) = tab2(id_kol).

Próbowałem różne sposoby i albo mam błąd składni, albo że tabela nie istnieje.

Przykład:

Kopiuj
INSERT INTO tab1(kolor) SELECT kolor FROM tab2 WHERE tab1.kolor = tab2.kolor;
Marcin.Miga
  • Rejestracja:ponad 17 lat
  • Ostatnio:dzień
  • Postów:2794
0

To co jest po INSERT, czyli sam SELECT ... musi być poprawne i działać. U ciebie nie działa.

SH
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 lata
  • Postów:152
0

Dziękuję za odpowiedź, możesz napisać jak poprawnie powinno wyglądać to polecenie ?

szarotka
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 3 godziny
  • Postów:551
1

Chciałbym do tab1(kolor) wprowadzić wszystkie wartości tab2(kolor) przy sprawdzeniu, że tab1(id_kol) = tab2(id_kol).

Nie rozumiem. Skoro masz już kolory w tab1 to po co je wstawiać?

Kopiuj
SELECT kolor FROM tab2 WHERE tab1.kolor = tab2.kolor;

to twoje zapytanie jest złe, bo w SELECT nie masz tab1.

Jeśli dobrze interpretuję, masz pustą tabelę tab1 i chcesz tam wstawić wszystkie kolory z tab2? Jeśli tak to wtedy:

Kopiuj
INSERT INTO tab1(kolor) SELECT kolor FROM tab2 
edytowany 1x, ostatnio: szarotka
SH
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 lata
  • Postów:152
0

Chciałbym nadpisać nowe wartości, ponieważ w jednej z tabel kolor jest zły, a w drugiej dobry.

szarotka
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 3 godziny
  • Postów:551
1

Chciałbym nadpisać nowe wartości, ponieważ w jednej z tabel kolor jest zły, a w drugiej dobry.

Czyli UPDATE a nie INSERT

Kopiuj
UPDATE t1 SET kolor = t2.kolor
FROM tab1 t1
JOIN tab2 t2 ON t1.id_kol = t2.id_kol

Możesz najpierw zweryfikować SELECT:

Kopiuj
SELECT t1.kolor, t2.kolor
FROM tab1 t1
JOIN tab2 t2 ON t1.id_kol = t2.id_kol
edytowany 1x, ostatnio: szarotka
SH
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 lata
  • Postów:152
0

@szarotka: Dziękuję za zainteresowanie pomocą.

Wykonuję (jestem na aktywnej bazie test - nie wiem czy ma to znaczenie i wprowadzam kwarende):

Kopiuj
UPDATE tab1 SET kolor = tab2.kolor
FROM tab1
JOIN tab2 ON tab1.id_kol = tab2.id_kol

Jak wykonam takie polecanie to otrzymuję:

Kopiuj
Błąd SQL (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM tab1 
JOIN tab2 ON tab1.id_kol = tab2.id_kol at line 2
 Zmodyfikowane wiersze: 0  Znalezionych wierszy: 0  Ostrzeżenia: 0  Czas przetwarzania 0 of 1 zapytanie: 0,000 sec. */

edytowany 3x, ostatnio: shl
SH
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 lata
  • Postów:152
0

Id są te same, identyczne.

szarotka
zrób wpierw SELECT zamiast UPDATE i zweryfikuj
SH
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 lata
  • Postów:152
0

poprawiłem, dodałem błąd.. który się wyswietla

SH
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 lata
  • Postów:152
0

@szarotka nie wiesz, dlaczego pojawi się błąd ?

szarotka
ehhh trzeba było od razu pisać jaka baza, może na MariaDB to inaczej działa
SH
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 lata
  • Postów:152
0

Pomożesz mi zrobić to odpowiednio ?

SH
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 4 lata
  • Postów:152
0

Udało się, wygląda na to, że na początku trzeba było podać dwie nazwy tabel:

Kopiuj
UPDATE LOW_PRIORITY tab1, tab2
SET tab1.kolor = tab2.kolor
WHERE tab1.id_kol = tab2.id_kol;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.