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