Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL]Kopiowanie rekordów z tabeli A do tabeli B, Jak w temacie.
heronek
post 21.11.2016, 23:03:20
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


Witam, jestem początkującym twórcą baz danych w oparciu o narzędzie Workbench. Mój problem polega na tym iż nie mogę poradzić sobie z zagadnieniem skopiowania rekordów z tabeli A do tabeli B. Czy mógłby mnie ktoś nakierować na dobry trop? Poniżej wklejam dwa script'y ukazujące obydwie tabele:

  1.  
  2. CREATE TABLE IF NOT EXISTS msu_MIASTA
  3. (id_m varchar(5) NOT NULL,
  4. id_w varchar(2) NOT NULL,
  5. nazwa_m varchar(20) NOT NULL,
  6. X decimal(10,2) DEFAULT NULL,
  7. Y decimal(10,2) DEFAULT NULL,
  8. B decimal(8,4) DEFAULT NULL,
  9. L decimal(8,4) DEFAULT NULL,
  10. PRIMARY KEY (id_m,id_w));


  1. CREATE TABLE IF NOT EXISTS wsp_MIASTA
  2. (id_m varchar(5) NOT NULL,
  3. id_w varchar(2) NOT NULL,
  4. X decimal(10,2) DEFAULT NULL,
  5. Y decimal(10,2) DEFAULT NULL,
  6. B decimal(8,4) DEFAULT NULL,
  7. L decimal(8,4) DEFAULT NULL,
  8. PRIMARY KEY (id_m,id_w));


PS: Chcę skopiować rekordy X, Y, B, L z tabeli wsp_MIASTA do tabeli msu_MIASTA.


Go to the top of the page
+Quote Post
rad11
post 21.11.2016, 23:25:46
Post #2





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


http://www.w3schools.com/sql/sql_insert_into_select.asp
Go to the top of the page
+Quote Post
heronek
post 22.11.2016, 00:17:11
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


A jak ułożyć warunek w oparciu o klucze główne?
Go to the top of the page
+Quote Post
viking
post 22.11.2016, 07:09:01
Post #4





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Dokładnie tak samo.


--------------------
Go to the top of the page
+Quote Post
heronek
post 22.11.2016, 11:00:08
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


Albo się do końca nie rozumiemy albo ja nie rozumiem. Otóż chcę aby wszystkie wiersze z kolumn B,L,X,Y z tabeli wsp_MIASTA skopiowały się do tych samych kolumn z tabeli msu_MIASTA. Ustawiłem klucz główny by przy kopiowaniu danych nastąpiło przy okazji ich posortowanie. Przy wykorzystaniu poniżej wklejonego scriptu:

  1. INSERT INTO msu_MIASTA (B, L, X, Y)
  2. SELECT B, L, X, Y
  3. FROM wsp_MIASTA;


wyskakuje błąd: Field 'id_m' doesn't have a default value

Hym, niewiele mi to mówi jako że rozpoczynam Swoją przygodę z MySQL.

PS: Nie potrzebuje odsyłania do stron z encyklopediami MySQL z banalnymi przykładami bo potrafię takie sam wyszukać. Na sztukę to można jajka sprzedawać, a nie odpowiadać na posty.

Ten post edytował heronek 22.11.2016, 11:00:51
Go to the top of the page
+Quote Post
viking
post 22.11.2016, 11:05:26
Post #6





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Field 'id_m' doesn't have a default value oznacza że nie wkładasz żadnej wartości do tego pola, a nie ma też żadnej domyślnej. U ciebie id_m i id_w są NOT NULL.


--------------------
Go to the top of the page
+Quote Post
heronek
post 22.11.2016, 11:37:59
Post #7





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


Domyślnie jest NOT NULL, ale po stworzeniu tychże tabeli zostały one uzupełnione o dane, więc mają wartość, a mimo to nadal wyświetla ten komunikat błędu.
Go to the top of the page
+Quote Post
viking
post 22.11.2016, 11:41:03
Post #8





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


To że wcześniej były zapisane jakieś rekordy z wartością nie ma znaczenia. Podczas operacji INSERT nie mają żadnej wartości a zgodnie z restrykcją kolumny mają być NOT NULL.


--------------------
Go to the top of the page
+Quote Post
heronek
post 22.11.2016, 12:03:15
Post #9





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


Więc istnieje jakiś prosty sposób na kopiowanie całych kolumn z jednej tabeli do drugiej w sposób uporządkowany na podstawie klucza głównego (w tym przypadku id_m id_w)?
Go to the top of the page
+Quote Post
viking
post 22.11.2016, 12:15:10
Post #10





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Tak, ten wyżej z uwzględnieniem restrykcji kolumn. Skopiuj też klucze albo zdejmij ograniczenie NOT NULL.

Ten post edytował viking 22.11.2016, 12:20:10


--------------------
Go to the top of the page
+Quote Post
heronek
post 22.11.2016, 12:51:14
Post #11





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


Niestety nie mam pojęcia jak w tym przypadku ułożyć warunek o klucze główne które nałożyłem po wprowadzeniu danych (id_m, id_w) do obydwu tabel. A przecież nie będę tworzył warunku na podstawie kopiowania do niego wartości każdego z wierszy klucza.
Go to the top of the page
+Quote Post
viking
post 22.11.2016, 12:56:07
Post #12





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


No dobrze, to co ma się znaleźć w nowej tabeli w kolumnach id_m, id_w?


--------------------
Go to the top of the page
+Quote Post
heronek
post 22.11.2016, 13:02:38
Post #13





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


A więc tak, mają powstać dwie tabele- wsp_MIASTA oraz msu_MIASTA:
  1. CREATE TABLE IF NOT EXISTS wsp_MIASTA
  2. (id_m varchar(5)KEY NOT NULL ,
  3. id_w varchar(2) NOT NULL ,
  4. X decimal(10,2) DEFAULT NULL,
  5. Y decimal(10,2) DEFAULT NULL,
  6. B decimal(8,4) DEFAULT NULL,
  7. L decimal(8,4) DEFAULT NULL);


  1. CREATE TABLE IF NOT EXISTS msu_MIASTA
  2. (id_m varchar(5)KEY NOT NULL ,
  3. id_w varchar(2) NOT NULL,
  4. nazwa_m varchar(20) NOT NULL,
  5. X decimal(10,2) DEFAULT NULL,
  6. Y decimal(10,2) DEFAULT NULL,
  7. B decimal(8,4) DEFAULT NULL,
  8. L decimal(8,4) DEFAULT NULL);


Uzupełniam je o następujące dane:
  1. INSERT INTO wsp_MIASTA (id_w,id_m,B,L)
  2. VALUES
  3. ('06','03032','51.1333','23.5000'),
  4. ('06','63011','51.2500','22.5667'),
  5. ('06','61011','52.0333','23.1333'),
  6. ('06','19011','51.5500','23.5500'),
  7. ('06','01021','52.0755','23.6161'),
  8. ('06','15011','51.7833','22.6167'),
  9. ('06','04011','50.8000','23.9167'),
  10. ('06','05054','50.7167','22.4167'),
  11. ('06','06011','50.9833','23.1833'),
  12. ('06','07011','50.9167','22.2333'),
  13. ('06','08011','51.4667','22.6333'),
  14. ('06','10034','51.2833','22.8667'),
  15. ('06','11011','51.9272','22.3833'),
  16. ('06','12054','51.1500','21.9667'),
  17. ('06','13044','51.6333','22.9000'),
  18. ('06','14011','51.4167','21.9667'),
  19. ('06','16044','51.6333','21.9333'),
  20. ('06','16011','51.5667','21.8333'),
  21. ('06','17011','51.2500','22.6833'),
  22. ('06','17034','51.1342','22.8447');


insert into msu_MIASTA (id_w,id_m,nazwa_m)
values('06','03032','Chelm'),
('06','63011','Lublin'),
('06','61011','Biala Podlaska'),
('06','19011','Wlodawa'),
('06','01021','Terespol'),
('06','15011','Radzyn Podlaski'),
('06','04011','Hrubieszow'),
('06','05054','Janow Lubelski'),
('06','06011','Krasnystaw'),
('06','07011','Krasnik'),
('06','08011','Lubartow'),
('06','10034','Leczna'),
('06','11011','Lukow'),
('06','12054','Opole Lubelskie'),
('06','13044','Parczew'),
('06','14011','Pulawy'),
('06','16044','Ryki'),
('06','16011','Deblin'),
('06','17011','Swidnik'),
('06','17034','Piaski');

Następnie tworzę klucze głowne:
  1. ALTER TABLE msu_MIASTA ADD PRIMARY KEY (id_m, id_w);


  1. ALTER TABLE wsp_MIASTA ADD PRIMARY KEY (id_m, id_w);


Więc mam już tabele z uzupełnionymi poszczególnymi kolumnami. Teraz chciałbym utworzyć skrypt który pozwoli mi skopiowanie wartości (B,L,X,Y) z tebeli wsp_MIASTA do tabeli msu_MIASTA w oparciu o ustalone klucze główne.





Go to the top of the page
+Quote Post
viking
post 22.11.2016, 13:13:26
Post #14





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Klucz główny dodaje tylko indeks i unikalność. Dopóki nie usuniesz NOT NULL nie będziesz w stanie wstawić tam pustych wartości. Jeśli nie chcesz kopiować kolumn id_m/w t wstaw tam coś losowego. Naprawde nie wiem jak mam ci to lepiej wytłumaczyć. Takie restrykcje sam nakładasz i nie da się ich inaczej złamać bo wtedy bezcelowe były by wszystkie ograniczenia.

Ten post edytował viking 22.11.2016, 13:15:08


--------------------
Go to the top of the page
+Quote Post
heronek
post 22.11.2016, 13:27:26
Post #15





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


A istnieje taka możliwość byś mi przedstawił jak byś to zrobił?
Go to the top of the page
+Quote Post
nospor
post 22.11.2016, 13:41:08
Post #16





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Nie znamy twoich zalozen. nie wiemy po grzyba chcesz miec dwie niemalze identyczne tabele - na chwile obecna to nie ma zadnego sensu.
Nie wiemy czemu zakladasz tak dziwne klucze glowne, ktore na dodatek nie chcesz kopiowac z jednej tabeli do drugiej a ktore na chwile obecna wydaja sie, ze powinny byc poprostu skopiowane

ps: odnosze nie odparte wrazenie ze ty z tabeli wsp chcesz wpisac dane do odpowiednich rekordow z msu. Nie wiem czy wiesz, ale INSERT dodaje te rekordy jako nowe do msu a nie updatuje rekordy z msu.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
heronek
post 22.11.2016, 14:01:58
Post #17





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


O tym to wiem. Takie są studia panowie i bezsensowne założenia.
Go to the top of the page
+Quote Post
nospor
post 22.11.2016, 14:06:15
Post #18





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Ale poki co to ty nam opowiadasz o tych zalozeniach i nadal nic wiemy. Wiec poki co to to problem jest po Twojej stronie a nie po stronie studiow. To nie studia nam nie mowia co sie ma konkretnie dziac tylko ty.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
heronek
post 22.11.2016, 15:26:39
Post #19





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


Przecież wyraźnie napisałem że mam w oparciu o dwie kolumny które są takie same w dwóch tabelach skopiować dane z jednej tabeli do drugiej, przykładowo żeby dane z kolumny X,Y o id=1 kopiowały się do drugiej tabeli o tym samym id, a tak ma być dla wszystkich kolumn. Jak wyglądają tabele to widać na poprzednich moich postach.
Go to the top of the page
+Quote Post
nospor
post 22.11.2016, 15:29:32
Post #20





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Cytat
Przecież wyraźnie napisałem [.....] przykładowo żeby dane z kolumny X,Y o id=1 kopiowały się do drugiej tabeli o tym samym id, a tak ma być dla wszystkich kolumn
A ja skolei ci wyraznie napisalem:

Cytat
ps: odnosze nie odparte wrazenie ze ty z tabeli wsp chcesz wpisac dane do odpowiednich rekordow z msu. Nie wiem czy wiesz, ale INSERT dodaje te rekordy jako nowe do msu a nie updatuje rekordy z msu.

Na co odpisales:
Cytat
O tym to wiem.

Tak wiec nie, nie wiesz.
Zrozum wkoncu ze ty chcesz zrobic UPDATE a nie INSERT. Nie wierze, ze na studiach kaza ci robic insert gdy proszą o aktualizacje rekordu wiec nie zwalaj prosze swojej niewiedzy na studia bo to tylko i wylacznie twoja wina smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 9.05.2025 - 07:32