legrooch [ MPO Squad Member ]
Pomoc banalna SQLowa mile widziana :) Pomożecie? :)
Witam,
Brak czasu, a muszę mieć prawie na już....
Mam dwie tabele:
Tabela1 - zawiera ID, Nazwa (nvarchar), Wpis (nvarchar)
Tabela2 - zawiera ID, Nazwa (ntext), Wpis (ntext)
Teraz tak:
- tabela1 zawiera w kolumnie Nazwa rekordy. Chcę je przeimportować do tabela2 nie gubiąc powiązania po ID.
Jak powinno wyglądać zapytanie prawidłowe? :)
yasiu [ Legend ]
a nie możesz po prostu zmienić typu kolumny? tak mi się coś kołacze...
skid [ ]
INSERT INTO `baza`.`nowa_tabela` SELECT * FROM `baza`.`stara_tablea`;
to najprosciej jak sie da
yasiu [ Legend ]
skid - ale w nowej tabeli id nie muszą się zgadzać z tymi w starej...
a spróbuj kolumnę id zrobić nieautoinkrementowaną, normalnie przeselektować ze starej tabeli w nową, a potem kolumnę id zrobić znowu autoinc?
skid [ ]
jak zrozumialem, nowa tabela jest pusta, wiec id sie przekopiuje,
Chcę je przeimportować do tabela2 nie gubiąc powiązania po ID.
wiec chyba o to chodzi?
yasiu [ Legend ]
a fakt... sprawdziłem sobie i rzeczywiście id ręcznie wsadzane działa tak jak piszesz :)
przepraszam :D
YogiYogi [ Konsul ]
Jesli docelowa tabela ma autoincrement to:
1. Czyscisz docelowa tabele jesli zawierala dane
2. przerzucasz dane insert into tabela_docelowa (lista kolumn) select (lista column) from tabela_zrodlowa
3. Sprawdzasz jaki jest maksymalny wrzucony ID i ustawiasz odpowiednio incrementacje na docelowej tabeli poleceniem
DBCC CHECKIDENT('nazwa tabeli w apostrofach', RESEED, wartosc_id_wieksza_niz_maksymalny_w_tej_tabeli)
legrooch [ MPO Squad Member ]
Dobra, zrobiłem to inaczej:
UPDATE ListaWlasciwosci
SET ListaWlasciwosci.nazwa = ListaWlasciwosci_backup.nazwa
FROM dbo.ListaWlasciwosci_backup
INNER JOIN dbo.ListaWlasciwosci
ON (dbo.ListaWlasciwosci.id = dbo.ListaWlasciwosci_backup.id);
Dzięki za pomoc tak czy inaczej :)
Edit:
Panowie, ale INSERT to chyba w takiej sytuacji nie tego? :) Doda nowe rekordy do tabeli, a nie zrobi UPDATE/SET? :)
skid [ ]
ja zalozylem ze nowa tabela jest pusta, bo nic nie wspomniales o tym:)
tak z ciekawosci, o jaki SQL serwer chodzi?
legrooch [ MPO Squad Member ]
SQL 2000 w tym przypadku. Działa zarówno dla 2000, 2005 jak i 2008.
Co do pustej tabeli - rzeczywiście, mój błąd :) Zapomniałem dodać, że Wpis jest pełny dla wszystkich rekordów :)
yasiu [ Legend ]
podłączę się... zapewne to zmęczenie i zaćma... ale
mam tabele
zadania - tu opisuje sobie pewne zadania
mam tabelę kompetencje - tu opisuje sobie kompetencje przerozne
mam tabele zadania_kompetencje gdzie w formie id_zadanie id_kompetencja sa laczone kompetencje ktore mozna ocenic danym zadaniem
np.
id_zadanie-id_kompetencja
1 - 1
1 - 3
1 - 4
2 - 1
3 - 2
3 - 3
3 - 4
no i mam jeszcze trzecia tabelke gdzie zawarte sa id kompetencji ktorych szukam - w zadaniach
i teraz - potrzebna mi kwerenda, ktora znajdzie w tych tabelkach wszystkie zadania oceniajace tylko i wylacznie te kompetencje ktore sa w trzeciej tabelce
i druga ktora wyszuka wszystkie w ktorych wystepuja te bedace w trzeciej tabelce i jeszcze inne
zapewne to banal i w poniedzialek zrobilbym to od razu, ale jak mi sie uda teraz, bede mial spokojniejszy weekend :D
skid [ ]
moze ja tez jestem zmeczony po 7 godzinach w pracy, ale moglbys to wytlumaczyc jeszcze raz tylko bardziej przejrzyscie?:)
albz74 [ Legend ]
yasiu - zwykly join (inner) załatwi sprawę (po id_kompetencji z tabeli z id kompetencji)
a drugie to outer join
yasiu [ Legend ]
skid - no widzisz :D
albz - nie uzywalem jeszcze tego, poszukam w poniedzialek przykladow :)
dzieki
yasiu [ Legend ]
mam tak:
mysql> select * from ass_zadania_pelne AS zadania INNER JOIN ass_zadania_temp AS temp ON zadania.id_kompetencja_pelna=temp.id_kompetencja;
+----+------------+----------------------+----+----------------+
| id | id_zadanie | id_kompetencja_pelna | id | id_kompetencja |
+----+------------+----------------------+----+----------------+
| 1 | 6 | 3 | 1 | 3 |
| 4 | 6 | 5 | 2 | 5 |
| 6 | 7 | 5 | 2 | 5 |
| 7 | 7 | 3 | 1 | 3 |
| 10 | 10 | 3 | 1 | 3 |
| 12 | 11 | 3 | 1 | 3 |
| 14 | 12 | 5 | 2 | 5 |
| 15 | 12 | 3 | 1 | 3 |
| 17 | 13 | 3 | 1 | 3 |
| 20 | 14 | 5 | 2 | 5 |
| 21 | 14 | 3 | 1 | 3 |
| 23 | 15 | 5 | 2 | 5 |
| 24 | 15 | 3 | 1 | 3 |
| 27 | 16 | 3 | 1 | 3 |
| 28 | 17 | 5 | 2 | 5 |
| 29 | 17 | 3 | 1 | 3 |
| 32 | 18 | 5 | 2 | 5 |
| 33 | 18 | 3 | 1 | 3 |
| 36 | 19 | 3 | 1 | 3 |
| 38 | 20 | 5 | 2 | 5 |
| 39 | 20 | 3 | 1 | 3 |
| 42 | 21 | 3 | 1 | 3 |
| 43 | 21 | 5 | 2 | 5 |
| 44 | 22 | 3 | 1 | 3 |
| 46 | 22 | 5 | 2 | 5 |
| 47 | 23 | 3 | 1 | 3 |
| 49 | 24 | 3 | 1 | 3 |
| 55 | 25 | 3 | 1 | 3 |
| 57 | 26 | 3 | 1 | 3 |
| 59 | 27 | 5 | 2 | 5 |
| 60 | 27 | 3 | 1 | 3 |
| 63 | 28 | 3 | 1 | 3 |
+----+------------+----------------------+----+----------------+
w tabeli ass_zadania_temp znajdują się id kompetencji których szukam w zadaniach. co zawiera ass_zadania_pelne - to powiązanie zadań z kompetencjami które można sprawdzić za ich pomocą.
problem w tym, że powyższa kwerenda pokazuje mi wszystkie zadania dzięki którym można zbadać kompetencje z temp, ale też te, dzięki którym można sprawdzić inne kompetencje, a chodziło mi o bardziej ścisłe sprawdzenie. czyli - to co wyżej opisuje drugi punkt mojego problemu, dalej nie wiem co zrobić z pierwszym.
albz74 [ Legend ]
zrób join nie na liście kompetencji pełnych tylko na zadaniach pełnych. Jeżeli potrzebujesz jakiekolwiek kolumny z kompetencji pełnych to zdefiniuj jako osobnego joina.
Sam siebie przeczytałem i nic nie rozumiem :D
Chodzi o to, że jak robisz inner join, i łączysz dwie tabele po jakimś polu, to w wyniku powinieneś uzyskać tylko takie rekordy, dla których wartość łączonego pola występuje w obu.
cdn
albz74 [ Legend ]
I tak- jeżeli chcesz uzyskać w rezultacie tylko informację o kompetencjach, cytuję:
"potrzebna mi kwerenda, ktora znajdzie w tych tabelkach wszystkie zadania oceniajace tylko i wylacznie te kompetencje ktore sa w trzeciej tabelce "
czyli budujesz zapytanie na tabelce z zadaniami (id_zadania) oraz trzeciej tabelki gdzie są szukane przez Ciebie kompetencje łączysz inner joinem po polu id_kompetencji obie tabele. W rezultacie powinieneś dostać zestawienie wszystkich istniejących kombinacji zadania i kompetencji, które są w obu tabelach. O ile nic nie pochrzaniłem : )
Jest jeszcze inny sposób, jeżeli ten nie zadziała zgodnie z oczekiwaniami to daj znać.
yasiu [ Legend ]
albz - ale przeciez takie zapytanie przedstawilem, i wynik z niego...
problem w tym, ze np. zadanie z id 6 oprocz kompetencji z id 3 i 5 zawiera tez kompetencje z id 6 i 7
czyli ta kwerenda wypluwa mi wszystkie zadania gdzie sa kompetencje 3 i 5 ale tez inne kompetencje
wymyslilem jak to obejsc troche dookola, ale jesli da sie inaczej, chetnie sprobuje :)