GRY-Online.pl --> Archiwum Forum

Pomoc banalna SQLowa mile widziana :) Pomożecie? :)

12.11.2008
15:13
smile
[1]

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? :)

12.11.2008
15:24
[2]

yasiu [ Legend ]

a nie możesz po prostu zmienić typu kolumny? tak mi się coś kołacze...

12.11.2008
15:38
[3]

skid [ ]

INSERT INTO `baza`.`nowa_tabela` SELECT * FROM `baza`.`stara_tablea`;

to najprosciej jak sie da

12.11.2008
15:39
[4]

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?

12.11.2008
15:42
[5]

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?

12.11.2008
15:50
[6]

yasiu [ Legend ]

a fakt... sprawdziłem sobie i rzeczywiście id ręcznie wsadzane działa tak jak piszesz :)

przepraszam :D

12.11.2008
15:55
smile
[7]

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)

13.11.2008
09:55
[8]

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? :)

13.11.2008
11:59
[9]

skid [ ]

ja zalozylem ze nowa tabela jest pusta, bo nic nie wspomniales o tym:)
tak z ciekawosci, o jaki SQL serwer chodzi?

13.11.2008
12:05
[10]

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 :)

14.11.2008
15:38
[11]

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

14.11.2008
16:16
[12]

skid [ ]

moze ja tez jestem zmeczony po 7 godzinach w pracy, ale moglbys to wytlumaczyc jeszcze raz tylko bardziej przejrzyscie?:)

14.11.2008
16:50
[13]

albz74 [ Legend ]

yasiu - zwykly join (inner) załatwi sprawę (po id_kompetencji z tabeli z id kompetencji)
a drugie to outer join

15.11.2008
21:08
[14]

yasiu [ Legend ]

skid - no widzisz :D

albz - nie uzywalem jeszcze tego, poszukam w poniedzialek przykladow :)

dzieki

17.11.2008
10:39
[15]

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.

17.11.2008
10:45
[16]

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

17.11.2008
10:57
[17]

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ć.

17.11.2008
13:32
[18]

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 :)

© 2000-2025 GRY-OnLine S.A.