Halloweenská akce! Na stránce s dobitím bodů zadej dole kód STRASIDELNYCH20 a získej porci +20% bodů zdarma!
Akce končí 31.10. o půlnoci.

Diskuze: Pořadí sloupců

Ostatní jazyky SQL SQL a databáze Pořadí sloupců

Aktivity (1)
Avatar
maxijoey
Člen
Avatar
maxijoey:21. května 15:05

Dobrý den pánové a případné dámy.
Jsem trochu zmaten. Když použiji v C# něco takového:

string dotaz = "INSERT INTO " + nazevTabulkyPro­dukce + " SELECT * FROM tabulka_import " +
"WHERE id_dodavatele = " + idDodavatele +
" AND code NOT IN(SELECT code FROM "+ nazevTabulkyPro­dukce +")";
var cmd = new MySqlCommand(dotaz, dbCon.Connection);

pro přesun řádků jedné tabulky do druhé, konkrétně jen řádků které v ní nejsou. Dle čeho se sloupce párují? Ty dvě tabulky mám téměř totožné a myslel jsem že se páruje název sloupce na název sloupce. Teď mi nějak vyplynulo po pár pokusech, že se to páruje po indexech, když prohodím pořadí sloupcu v druhé tabulce, je vše blbě zapsáno.

Je to normální chování?
To jsem si vcelku myslel že je DB chytřejší.

A funguje to tam případně i v PHP na podobném příkladu?

 
Odpovědět 21. května 15:05
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:21. května 15:43

SELECT * FROM tabulka_import
Vyber cely radek. Poradi sloupcu je podle tabulky. Vystup ja balicek dat, ktery neobsahuje nazvy sloupcu. Predstav si to jako csv soubor

zahlavi0;zahla­vi1;zahlavi2
aaa;bbb;ccc
ddd;eee;fff

"INSERT INTO " + nazevTabulkyPro­dukce +
Opet, nemas definovane poradi sloupcu, takze do tabulky vklada v poradi v jakem tabulka je, balicek dat.
Pokud mas sloupce prehazene, tak je tato kontrukce spatne.
V obou pripadech je mozne zadat poradi sloupcu, jake chces na vystupu.

Pozor, c# fetch prikaz neco jineho nez sql. Ten veme balicek dat, ktery dostal z sql a predela to na pole treba se jmeny sloupcu.

google = sql select insert all table differend column order
https://stackoverflow.com/…ific-the-col
Podobny pripad...

INSERT INTO foo
SELECT *
FROM foo_bk

INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table

https://dba.stackexchange.com/…n-postgresql

insert into items_ver -- jako ty, nevyjmenoval zadne sloupce
select * from items where item_id=2;

insert into items_ver(item_id, item_group, name) -- vyjmenoval jen u jedne tabulky
select * from items where item_id=2;

insert into items_ver (item_id, name, item_group) -- vyjmenoval pro obe tabulky
select item_id, name, item_group from items where item_id=2;

Ale pozor, tva varianta je casove rychlejsi, protoze nemusi prehazovat sloupce. Jenom, tys proste prehazel sloupce :)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 21. května 15:43
Avatar
maxijoey
Člen
Avatar
maxijoey:21. května 16:28

Dík za osvětu :-) Takže poslední příklad poslední varianta, v jakem pořadí ty sloupce zapíšu tak jdou do druhé tabulky že? Já pravděpodobně zůstanu u své varianty, jelikož potřebuji aby to pracovalo co nejrychleji, holt si dám bacha na to.

 
Nahoru Odpovědět 21. května 16:28
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.