Имя: Пароль:
IT
Админ
Подскажите по запросу SQL (INSERT INTO)
0 smaharbA
 
07.06.11
11:18
есть запрос вида

insert into table (a1, a2) values (1,2) , (3,4) , (5,6)

как в самом запросе сделать условие типа where a1!=5 ?
1 Господин ПЖ
 
07.06.11
11:22
никак... ибо бред...
2 Fragster
 
гуру
07.06.11
11:24
(0) все во временную таблицу, а потом insert-select
3 МихаилМ
 
07.06.11
11:24
добавить ограничение
или триггер

если есть права.

потом удалить.
4 smaharbA
 
07.06.11
11:25
на первый только взгляд бред

запрос формируется из файла данных, при парсинге конечно возникают ошибки, на стадии парсинга отсеивать слишком затратно
пока делается через временную таблицу, но это может приводить к забитию файловой системы темп (теоретически)
5 smaharbA
 
07.06.11
11:25
(3) триггер не добавить ибо мускуль 3.х (там вроде нет триггеров еще)
а ограничение подробнее ?
6 Fragster
 
гуру
07.06.11
11:26
(4) если кусками по 1 запросу (т.е. по ~2МБ, ибо больше вряд ли проканает) - то все будет ок
7 Живой Ископаемый
 
07.06.11
11:26
ограничение на значения в поле
8 ДенисЧ
 
07.06.11
11:27
нет такой возможности в языке.
делай так

insert into...
select from ... where
9 МихаилМ
 
07.06.11
11:27
читайте доки

"create constrain"
10 rs_trade
 
07.06.11
11:28
какие триггеры? вы бредите. инсертить можно результат селекта. читаем BOL там же все есть
11 ДенисЧ
 
07.06.11
11:28
Ага. Констрейны. И ловите исключения...

Оно нужно, геморрой на голову?
12 smaharbA
 
07.06.11
11:30
(6) кусками дополнительные сложности, кусок за период должен отправляться за одно подключение
13 Господин ПЖ
 
07.06.11
11:30
(4) все системы поглощающие данные из внешних сред состоят из двух контуров. Грязное хранилище - считанные данные как они есть и чистое - то что валидно с точки зрения логики системы.
14 Господин ПЖ
 
07.06.11
11:31
7, 9 - бугага...
15 smaharbA
 
07.06.11
11:31
(10) селект чего ? Вы сабж читали ?
16 Господин ПЖ
 
07.06.11
11:32
(15) бросай файл в грязное, из него данные в чистое...
17 ЗлобнийМальчик
 
07.06.11
11:32
(13) +1
18 rs_trade
 
07.06.11
11:32
(15) из временной таблицы. нет?
19 smaharbA
 
07.06.11
11:35
(18) из временной таблицы сейчас и тянет, но выше сказано про темп, она мала всего 100 мБ, запрос конечно такой  не будет, но за сеанс таких запросов не один, а пересоздавать временную таблицу тоже накладно
20 rs_trade
 
07.06.11
11:35
Что за файл вообще? Какой формат? Bulk insert для таких вещей у скуля есть.
21 smaharbA
 
07.06.11
11:37
пока работает так
insert into temp (a1, a2) values (1,2) , (3,4) , (5,6), ...;
insert into table  (...) select * from temp where ...;
22 smaharbA
 
07.06.11
11:38
(20) да есть подобное load data infile 'file'
но файл это не файл а поток и на другом конце сети
23 Широкий
 
07.06.11
11:40
запрос генерируется что ли?
24 Широкий
 
07.06.11
11:40
+23 текст запроса
25 smaharbA
 
07.06.11
11:41
(23) да
26 Широкий
 
07.06.11
11:42
А вставить проверку низзя что ли?
27 CoolCat
 
07.06.11
11:43
(21)insert into temp (a1, a2) values (1,2) , (3,4) , (5,6), ...;  в MSSQL 2000 не канает.... это че за хня???
28 smaharbA
 
07.06.11
11:44
Вот так


... |     {
               grep "^[0-2][0-9][0-9]\." | awk -v traffic_tmp="${traffic_tmp}" -v day="${day}" -v curr
_time="${curr_time}" \
                       'BEGIN { print "INSERT INTO `"traffic_tmp"` \
                       (`date`, `time`, `from_IP`, `port_from_IP`, `to_IP`, `port_to_IP`, `protocol`, `bytes`, `all_bytes`)
values " } \
                       { from_IP=$1; port_from_IP=""; to_IP=""; port_to_IP=""; bytes=""; all_bytes=""; protocol=""; \
                       if (NF == 5) \
                       { \
                               to_IP=$2; protocol=$3; bytes=$4; all_bytes=$5; \
                       } \
                       else if (NF == 7) \
                       { \
                               port_from_IP=$2; to_IP=$3; port_to_IP=$4; \
                               protocol=$5; bytes=$6; all_bytes=$7; \
                       } \
                       print "(\""day"\",\""curr_time"\",\""from_IP"\",\""port_from_IP"\",\""to_IP"\",\""port_to_IP"\",\""pr
otocol"\",\""bytes"\",\""all_bytes"\")," } \
                       END { print "(\""day"\",\""curr_time"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\");" }'

               echo "INSERT INTO \`${iface}_${year}\` \
                       (\`date\`, \`time\`, \`from_IP\`, \`port_from_IP\`, \`to_IP\`, \
                       \`port_to_IP\`, \`protocol\`, \`bytes\`, \`all_bytes\`) \
                       SELECT \`date\`, \`time\`, \`from_IP\`, \`port_from_IP\`, \
                       \`to_IP\`, \`port_to_IP\`, \`protocol\`, sum(\`bytes\`) as \`bytes\`, \
                       sum(\`all_bytes\`) as \`all_bytes\` FROM \
                       \`${traffic_tmp}\` WHERE (from_IP!='' AND \
                       port_from_IP!='' AND to_IP!='' AND port_to_IP!='' AND protocol!='') OR all_bytes!='0' \
                       GROUP BY \`date\`, \`time\`, \`from_IP\`, \`port_from_IP\`, \
                       \`to_IP\`, \`port_to_IP\`, \`protocol\`;"
       } | sed 's/\t\+/ /g' | tee -a /dev/stderr | ${sql_preffix}
29 smaharbA
 
07.06.11
11:44
(27) mysql
30 rs_trade
 
07.06.11
11:47
(27) синтаксис 2008
31 Широкий
 
07.06.11
11:48
(28) Тогда вообще не пойму в чем проблема..
Текст генириться.. Значения что ли сравнить нельзя?
32 Vovik
 
07.06.11
12:02
if

insert into table (a1, a2) values (1,2) , (3,4) , (5,6)

else

insert into table (a2) values (2) , (4) , (6)

А чем плохо перед запросом текст поправить?
33 stix2010
 
07.06.11
12:31
классика nsert into table  (...) select * from .... where
читай BOL двоечник
34 Vovik
 
07.06.11
12:37
(33)BOL это что? А напиши если не трудно запрос по твоей схеме для (0), очень интересно.
35 smaharbA
 
07.06.11
12:42
(31)(32) накладные расходы велеки, думалось, что в самом инсерте можно как то... Тогда уж с временной как было будет меньше мощностей
36 smaharbA
 
07.06.11
12:42
(33) ну, ну
37 КонецЦикла
 
07.06.11
13:20
(35) Значения откуда берутся?
Чо там если-то и так 125 раз?
Ни разу такой необходимости не было, хотя извратов делал достаточно
38 el-gamberro
 
07.06.11
13:24
DECLARE @tmp_bulktable table
39 el-gamberro
 
07.06.11
13:25
И никаких проблемов с забитием темпа :)
40 el-gamberro
 
07.06.11
13:25
(34) Book on line
41 smaharbA
 
07.06.11
13:51
(37) см (28) для мускуля, там канает синтаксис из (0)
(38) щаз, читай ветку внимательно
42 Skom
 
07.06.11
14:03
(41)
insert into
а потом делаешь
delete
43 smaharbA
 
07.06.11
14:06
(42) ага, лопатить таблицу с десятками миллионов записей
44 Skom
 
07.06.11
14:09
INSERT INTO tbl_temp2 (fld_id)
   SELECT tbl_temp1.fld_order_id
   FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
45 Skom
 
07.06.11
14:09
12.7.3.3. SELECT ... INTO Statement
SELECT col_name [, col_name] ...
   INTO var_name [, var_name] ...
   table_expr

SELECT ... INTO syntax enables selected columns to be stored directly into variables. The query should return a single row. If the query returns no rows, a warning with error code 1329 occurs (No data), and the variable values remain unchanged. If the query returns multiple rows, error 1172 occurs (Result consisted of more than one row). If it is possible that the statement may retrieve multiple rows, you can use LIMIT 1 to limit the result set to a single row.
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;

User variable names are not case sensitive. See Section 8.4, “User-Defined Variables”.

In the context of SELECT ... INTO statements that occur as part of events executed by the Event Scheduler, diagnostics messages (not only errors, but also warnings) are written to the error log, and, on Windows, to the application event log. For additional information, see Section 17.4.5, “Event Scheduler Status”.
46 Skom
 
07.06.11
14:10
47 Skom
 
07.06.11
14:10
(43) я вообще то пошутил)) насчет удаления из вставленного
48 smaharbA
 
07.06.11
14:14
(44)(45) сейчас так и делается, записывается в темпорари таблицу и из нее уже инсерт селектом с условием
49 Salimbek
 
07.06.11
14:16
(0) А нельзя так:
insert into table (a1, a2) //values (1,2) , (3,4) , (5,6)
select * from
(select 1 as k1,2 as k2
UNION ALL select 3,4
UNION ALL select 5,6) s
where k1<>5
50 smaharbA
 
07.06.11
14:20
(49) вариант