Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z łaczeniem tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
tmk7
Witajcie

Mam dwie tabele users1 i domeny. Potrzebuje wprowadzić wartości z pola kat_bazowy z tabeli domeny do tabeli users1. Próbuje na sposób podany niżej:

Insert into users1 (kat_bazowy) SELECT domeny.kat_bazowy FROM users2 INNER JOIN domeny ON users2.domain_id = domeny.id order by users2.user_id;

Dane z wybranego pola są faktycznie dodawane do tabeli users1, ale nie odpowiednio wg klucza tylko na koncu po dotychczasowym ostatnim rekordzie w tabeli users1.
Klucz primary jest w obu tabelach zdefiniowany - users2.domain_id = domeny.id.
W którym miejscu popelniam błąd?

Pozdrawiam
Mchl
Nowe wiersze zawsze są wstawiane na końcu tabeli. Nic z tym nie zrobisz.

Może raczej potrzebujesz UPDATE a nie INSERT ?
piotrooo89
czemu tu:

  1. SELECT domeny.kat_bazowy FROM users2


masz users2 jak pobierasz z domeny?
Mchl
Ma domeny za INNER JOIN.
piotrooo89
to nie powinno być tak:

  1. SELECT domeny.kat_bazowy FROM domeny INNER JOIN users2 ON users2.domain_id = domeny.id ORDER BY users2.user_id;
Mchl
A co za różnica? INNER JOIN jest przemienny.
tmk7
Nie dopisałem jeszcze, że tabela users2 to kopia users1.

Zgadza się, oba polecenia są poprawne i zwracaja to samo. Problem jest natomiast w kwestii dodawania rekordów odpowiednio względem klucza. INSERT dodaje na koncu a UPDATE daje tylko jeden rekord:

  1. --------------
  2. UPDATE users1 SET kat_bazowy=(SELECT domeny.kat_bazowy FROM users2 INNER JOIN domeny ON users2.domain_id = domeny.id ORDER BY users2.user_id)
  3. --------------
  4.  
  5. ERROR 1242 (21000): Subquery returns more than 1 row


No chyba że przekombinowałem cos w poleceniu
Mchl
Kod
UPDATE users1 INNER JOIN users2 ON users1.user_id = users2.user_id INNER JOIN domeny ON users2.domain_id = domeny.id SET users1.kat_bazowy = domeny.kat_bazowy
tmk7
Świetnie, działa.

Dzieki

  1. UPDATE users1 INNER JOIN users2 ON users1.user_id = users2.user_id INNER JOIN domeny ON users2.domain_id = domeny.id SET users1.kat_bazowy = domeny.kat_bazowy


Jakby to polecenie wyglądało jakby user1 było w bazie db1, user2 w bazie db2 a domeny w bazie db3?
phpion
nazwa_bazy.nazwa_tabeli.nazwa_pola

ale czy można zrobić UPDATE na kilku bazach to nie wiem - musisz sprawdzić sam.
Mchl
Można, a w każdym razie nic nie wskazuje na to by nie można było. Tabela to tabela.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.