Fórum Root.cz
		Hlavní témata => Vývoj => Téma založeno: korabro  05. 08. 2020, 13:41:03
		
			
			- 
				Potrebuji zkopirovat existujici zaznam v tabulce do tabulky ze ktere se zaznam kopiruje. Problem je s id zaznamu, ktery je zaroven primarnim klicem.
 Pomoci
 insert into tableA  SELECT * FROM tableA where id='34' zaznam vytvorit nelze, protoze id=id zdrojoveho zaznamu (duplicita)
 
 Nasel jsem dve reseni problemu:
 1) dynamicky generovat "insert" dotaz s vyctem sloupcu !=id
 2) pouziti pomocne tabulky
 
 Obe mi prijdou ponekud neohrabane. Da se pri kopirovani zaznamu pomoci
 insert into tableA  SELECT * FROM tableA where id='34' specifikovat "vsechny sloupce, mimo id"?
 
 
- 
				Pokud je id autoincrement pak:
 insert into table (<seznam sloupcu bez id>) select <seznam sloupcu bez is> from table where....
- 
				Pokud je id autoincrement pak:
 insert into table (<seznam sloupcu bez id>) select <seznam sloupcu bez is> from table where....
 
 
 To je presne reseni kde musim generovat jmena sloupcu a nebo ten list udrzovat rucne...
- 
				To je presne reseni kde musim generovat jmena sloupcu a nebo ten list udrzovat rucne...
 
 Udržovat ten list ručně je správné řešení. Hvězdička je určená pro rychlé psaní ad-hoc dotazů, v aplikaci by se používat neměla. Vždycky byste měl vědět, které přesně sloupce chcete použít.
- 
				To je presne reseni kde musim generovat jmena sloupcu a nebo ten list udrzovat rucne...
 
 Udržovat ten list ručně je správné řešení. Hvězdička je určená pro rychlé psaní ad-hoc dotazů, v aplikaci by se používat neměla. Vždycky byste měl vědět, které přesně sloupce chcete použít.
 
 
 V tomle pripade (v kontextu tabulky) skutecne potrebuji vsechny sloupce krom id. Kdyby slo pouzit neco jako * && !=id tak ho pouziji
- 
				Mozes pouzit databazu INFORMATION_SCHEMA:
 
 https://dev.mysql.com/doc/refman/8.0/en/information-schema-columns-table.html (https://dev.mysql.com/doc/refman/8.0/en/information-schema-columns-table.html)
 
 SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS`
 WHERE `TABLE_SCHEMA` = 'nazovdatabazy'
 AND `TABLE_NAME` = 'tableA'
 AND `COLUMN_NAME` != 'id'
 
- 
				Mozes pouzit databazu INFORMATION_SCHEMA:
 
 https://dev.mysql.com/doc/refman/8.0/en/information-schema-columns-table.html (https://dev.mysql.com/doc/refman/8.0/en/information-schema-columns-table.html)
 
 SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS`
 WHERE `TABLE_SCHEMA` = 'nazovdatabazy'
 AND `TABLE_NAME` = 'tableA'
 AND `COLUMN_NAME` != 'id'
 
 
 ja na to sel pomoci describe, ale tohle je rozhodne snazsi. Akorat jak to muzu dostat do seznamu sloupcu pro "SELECT col1,col2..  FROM..." ?
 
- 
				Asi nejjednodušeji se to dá řešit pomocí triggeru:
 
 CREATE TRIGGER tableA_id_increment BEFORE INSERT ON tableA FOR EACH ROW SET new.id=(SELECT max(id) FROM tableA)+1;
 Pak už projde:
 INSERT INTO tableA (SELECT * FROM tableA);