🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych
10 messages
10 total messages Started by Borneq Fri, 20 Jan 2017 10:02
Szybkie wypełnianie zerami tabeli
#195194
Author: Borneq
Date: Fri, 20 Jan 2017 10:02
23 lines
1168 bytes
w tabeli może być kilka rekordów typu

567, 1,2
753, 0,1

gdzie 567 i 753 to klucz
Czy dało by radę szybko przy pomocy polecenia SQL zrobić Insert ingore, 
tak że powstało by
0,0,0
1,0,0
2,0,0
3,0,0
....
566, 0,0
567, 1,2
568, 0,0
....
753, 0,1
...
100000, 0,0

Bez 100 tysięcy wołań w pętli "Insert ..Ingore"
?
Re: Szybkie wypełnianie zerami tabeli
#195195
Author: Paweł Broda
Date: Fri, 20 Jan 2017 10:05
1 lines
1256 bytes
a jaka to baza?
Re: Szybkie wypełnianie zerami tabeli
#195196
Author: Borneq
Date: Fri, 20 Jan 2017 10:08
4 lines
1039 bytes
W dniu 20.01.2017 o 11:05, Paweł Broda pisze:
> a jaka to baza?
>
MySQL
Re: Szybkie wypełnianie zerami tabeli
#195197
Author: Paweł Broda
Date: Fri, 20 Jan 2017 10:27
9 lines
1563 bytes
spróbuj zmergować to zapytanie do twojej tabeli:

WITH RECURSIVE x AS
(
  SELECT 1 AS a, 0 AS b, 0 AS c
  UNION ALL
  SELECT 1+a, b, c FROM x WHERE n<100000
)
SELECT * FROM x
Re: Szybkie wypełnianie zerami tabeli
#195198
Author: Cezary Grądys
Date: Fri, 20 Jan 2017 10:47
22 lines
1708 bytes
W dniu 20.01.2017 o 11:27, Paweł Broda pisze:
> WITH RECURSIVE x AS
> (
>   SELECT 1 AS a, 0 AS b, 0 AS c
>   UNION ALL
>   SELECT 1+a, b, c FROM x WHERE n<100000
> )
> SELECT * FROM x


Tylko a, a nie n we WHERE!

SELECT * FROM x;
test=> WITH RECURSIVE x AS
(
   SELECT 1 AS a, 0 AS b, 0 AS c
   UNION ALL
   SELECT 1+a, b, c FROM x WHERE a<100000
)
SELECT * FROM x;

Na postgresie działa
Re: Szybkie wypełnianie zerami tabeli
#195203
Author: Borneq
Date: Fri, 20 Jan 2017 10:55
7 lines
1344 bytes
W dniu 20.01.2017 o 11:27, Paweł Broda pisze:
> spróbuj zmergować to zapytanie do twojej tabeli:

zmergować?
to coś innego niż zwykłe execute?
Normalnie używam c++ connectora i sql::Statement-->execute(sql_statement);
a tutaj mergowanie? z jakiegoś programu czy z kodu C++?
Re: Szybkie wypełnianie zerami tabeli
#195199
Author: Borneq
Date: Fri, 20 Jan 2017 11:03
27 lines
1850 bytes
W dniu 20.01.2017 o 11:47, Cezary Grądys pisze:
> SELECT * FROM x;
> test=> WITH RECURSIVE x AS
> (
>   SELECT 1 AS a, 0 AS b, 0 AS c
>   UNION ALL
>   SELECT 1+a, b, c FROM x WHERE a<100000
> )
> SELECT * FROM x;
>
> Na postgresie działa

Tu mamy dwa selecty do sprawdzenia i polecenie? Jak się robi polecenie z 
"test=>"
u mnie wygląda to tak:
	MySqlDB db("127.0.0.1", "root", "rootpass", "bitcoin");
	string stmt;
	stmt += "test = > WITH RECURSIVE x AS\n";
	stmt += "(\n";
	stmt += "SELECT 1 AS a, 0 AS b, 0 AS c\n";
	stmt += "UNION ALL\n";
	stmt += "SELECT 1 + a, b, c FROM x WHERE a<100000\n";
	stmt += ")\n";
	db.execute(stmt);

i coś tu nie gra.
To jest procedura , jak się obsługuje odwrotnie od zwykłych statement?
Re: Szybkie wypełnianie zerami tabeli
#195202
Author: Borneq
Date: Fri, 20 Jan 2017 11:07
11 lines
1511 bytes
W dniu 20.01.2017 o 12:03, Borneq pisze:
> i coś tu nie gra.
> To jest procedura , jak się obsługuje odwrotnie od zwykłych statement?
zobaczyć:
https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-tutorials-stored-routines-statements.html

lub
https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-tutorials-stored-routines-prepared-statements.html
?

to bardziej zaawansowane rzeczy
Re: Szybkie wypełnianie zerami tabeli
#195200
Author: Paweł Broda
Date: Fri, 20 Jan 2017 12:18
41 lines
2687 bytes
W dniu piątek, 20 stycznia 2017 12:03:13 UTC+1 użytkownik Borneq napisał:
> W dniu 20.01.2017 o 11:47, Cezary Grądys pisze:
> > SELECT * FROM x;
> > test=> WITH RECURSIVE x AS
> > (
> >   SELECT 1 AS a, 0 AS b, 0 AS c
> >   UNION ALL
> >   SELECT 1+a, b, c FROM x WHERE a<100000
> > )
> > SELECT * FROM x;
> >
> > Na postgresie działa
> 
> Tu mamy dwa selecty do sprawdzenia i polecenie? Jak się robi polecenie z 
> "test=>"
> u mnie wygląda to tak:
> 	MySqlDB db("127.0.0.1", "root", "rootpass", "bitcoin");
> 	string stmt;
> 	stmt += "test = > WITH RECURSIVE x AS\n";
> 	stmt += "(\n";
> 	stmt += "SELECT 1 AS a, 0 AS b, 0 AS c\n";
> 	stmt += "UNION ALL\n";
> 	stmt += "SELECT 1 + a, b, c FROM x WHERE a<100000\n";
> 	stmt += ")\n";
> 	db.execute(stmt);
> 
> i coś tu nie gra.
> To jest procedura , jak się obsługuje odwrotnie od zwykłych statement?

To jest jeden select.

W ANSI SQL (i np. w Oracle) jest polecenie SQL MERGE. Z tego co wyczytałem to MySQL tego nie obsługuje - ale możesz spróbować tak:

INSERT IGNORE INTO TwojaTabela (a, b, c)
WITH RECURSIVE x AS
(
   SELECT 1 AS a, 0 AS b, 0 AS c
   UNION ALL
   SELECT 1+a, b, c FROM x WHERE a<100000
)
SELECT a, b, c FROM x
Re: Szybkie wypełnianie zerami tabeli
#195201
Author: Borneq
Date: Fri, 20 Jan 2017 12:44
9 lines
1580 bytes
W dniu 20.01.2017 o 13:18, Paweł Broda pisze:
> INSERT IGNORE INTO TwojaTabela (a, b, c)
> WITH RECURSIVE x AS

wsadziłem do workbencha ale jest podkreślone With,
na razie robię jedno wielkie zapytanie/polecenie w którym od razu jest 
tysiąc
Mam włożyć 450 tys, po jednym to nie czekałem ale czas około 30 minut, 
po 100 - 30 sekund, po 1000 - 10 sekund - jest dobrze
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads