Portál AbcLinuxu, 14. května 2025 05:43
Ahoj, mam takyto problem, mam v tabulke vela stlpcov, ktore vsetky vytiahnem do deklarovaneho kurzora mysql: DECLARE cur1 CURSOR FOR SELECT * FROM table1 WHERE id = NEW.id;
Nasledne potrebujem vziat tieto hodnoty a prekopirovat ich do tabulky table1_zaloha co je zaloha tabulky table1 okrem id. Problem je vtom, ze tych stlpcov je velmi vela a pride mi nezmyslene, deklarovat premenu pre kazdy stlpec zvlast a potom to z kurzora nakopirovat do tychto premennych a opat insertnut do tabulky table1_zaloha. Nejde to nieak jednoduchsie, bez deklaracie tych premennych?
A preco to preboha robis takto obtiazne cez cursor?
INSERT INTO zaloha
SELECT * FROM table1 WHERE id = NEW.id;
Taktio by ti to nestacilo?
Ale tych zaznamou tam moze byt viac, id v tomto pripade nie je unikatne.
Co to ma s tym spolocne ci ich je viac alebo nie? Insertne ich tolko kolko ich vyselektujes.
Ak tam mas v zalohe iny primary index ako v originale tak tie stlpce budes musit vymenovat asi takto
Insert Into zaloha (stlpec1,stlpec2,stlpec3)
Select stlpec1,stlpec2,stlpec3 FROM table1 WHERE id = NEW.id;
Ale bude to robit v jednom kroku a neporovnatelne rychlejsie ako kurzorom.
Doporucujem precitat help na Insert
No vyhodi mi to chybu Duplicate entry '668' for key 1
lebo v oboch tabulkach su hodnoty table_id ako primarne kluce a snazi sa tam insertnut aj tie, a kedze uz v tabulke existuje, skonci to z chybou. Nejde to nieako vyselektovat bez table_id, aby som nemusel vypisovat vsetky tie stlpce?
Ved si sprav select len na tie co neexistuju v zalohe. Napr:
SELECT *
FROM table1
Left Join zaloha on zaloha.ID = table1.ID
WHERE id = NEW.id and zaloha.id is Null;
Neviem ci je syntax spravny lebo ja pisem v MS SQL ale left join hadam zvladnes.
v zalohe je presne to co je v originale, aj auto increment, to je vlastne tabulka kde sa odkladaju nezname entity a ked sa stanu zanmimy, tak ich chcem preklopit do originalu, tak ze bude tam plno zaznamou, ktore maju rovnake table_id
No neviem co to pises za program ale supat zaznamy z tabuky do tabulky s autoincrement ID je docela blby napad.
Riesit si to mohol jednoduchym status fieldom. Minimalne v tej zalohe ten autoincrement nepotrebujes.
Potrebujem lebo tam zapisuju zariadenia ktore su nezname. Nejde spravit ten select njeako tak, ze vyberiem vsetko okrem table_id, aby som tam nemusel vsetky tie stlpce vypisovat?
Nie neda a znova to vravim ze to je blby napad a tom kurzore ani nehovorim.
Nejde spravit ten select njeako tak, ze vyberiem vsetko okrem table_id, aby som tam nemusel vsetky tie stlpce vypisovat?Jde, jednoduše použijete libovolný nástroj, který umí podle schématu databáze vytvořit šablonu SQL dotazu (třeba SQuirreL SQL), a ten jeden sloupeček z výsledné šablony umažete.
Mysslel som nieco sofistikovanejsie.
SELECT
ech je jenom taková pomůcka pro rychlé prototypování nebo ad-hoc dotazy, používat ji normálně v programu nebo v produkčním prostředí není dobrý nápad.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.