Имя: Пароль:
IT
Админ
Как скопировать строку таблицы БД на MySQL одним запросом?
,
0 D_Pavel
 
13.04.16
19:23
Собственно сабдж.
Как скопировать строку таблицы БД на MySQL одним запросом?
В таблице много колонок и ключевая тоже есть, все перечислять в тексте запроса не красиво. И они могут добавиться позже, переписывать запрос каждый раз тоже не красиво.
1 ДенисЧ
 
13.04.16
19:25
insert into
select * from

не катит?
2 D_Pavel
 
13.04.16
19:28
(1) Нет конечно. Задублируется уникальный ключ и ошибка будет.
3 mehfk
 
13.04.16
19:29
Учитывая авторство ветки, рекомендуется запасаться попкорном.
4 D_Pavel
 
13.04.16
19:41
(3) Учитывая что вопрос очень сложный, долго будешь хавать попкорн прежде чем кто-нибудь ответит.
5 mehfk
 
13.04.16
19:43
(4) В таких случаях в приличном обществе говорят "Приятного аппетита".
6 Cyberhawk
 
13.04.16
19:52
А что значит "скопировать строку"? Вставить в конец совпадающую по всем полям?
7 D_Pavel
 
13.04.16
19:57
(6) Да.
8 D_Pavel
 
13.04.16
19:59
Типа как когда в одноэске нажимаешь F9 когда находишься в форме списка.
9 D_Pavel
 
13.04.16
20:09
В 1 запрос по любому не получится. Можно хоть в 10, не принципиально, лишь бы поля не перечислять.
10 ДенисЧ
 
13.04.16
20:11
в мыскле вроде был insert or update, не?
11 trad
 
13.04.16
20:18
(7) в понятие "все поля" ключевые поля входят?
12 D_Pavel
 
13.04.16
21:03
(10) Да, есть там такое.
13 D_Pavel
 
13.04.16
21:04
(11) Нет конечно. См ответ на (1)
14 youalex
 
13.04.16
21:11
в ms можно через времянку, но это три запроса:
select * into #temp from table1 t1 where t1.keyfield = 1
update #temp set keyfield = 2
insert into table1 select * from #temp
15 D_Pavel
 
13.04.16
21:14
(14) Три запроса терпимо.
Почему "= 2"? Не подходит.
16 D_Pavel
 
13.04.16
21:15
У меня получилось только в 5 запросов написать. Меньше никак не могу, всю голову сломал. Второй день думаю.
17 mingw
 
13.04.16
21:26
CREATE TEMPORARY TABLE foo AS SELECT * FROM parts WHERE id = X;
UPDATE foo SET id=NULL;
INSERT INTO parts SELECT * FROM foo;
DROP TABLE foo;

Самое главное а работе программиста что? Гугль и яндекс: http://www.sql.ru/forum/471879/dublirovat-stroku-v-tablice
18 youalex
 
13.04.16
21:27
(15) это пример, я же не знаю какая структура таблицы)
19 mingw
 
13.04.16
21:28
(17)+ Когда требуется не обNULLить одно из полей а исключить. И не перечисляя все остальные. То извраты под каждую БД свои: http://www.sql-ex.ru/help/select20.php?Lang=0
20 Broadbread
 
13.04.16
21:42
21 mingw
 
13.04.16
21:47
(20) INSERT IGNORE INTO ... пропустит значения с дублем по ключу. Как это поможет (0)?
22 Broadbread
 
13.04.16
21:51
(21) Ух ты. Я только забил строку поиска и почитал по диагонали результат. Интересно, зачем оно такое?
23 mingw
 
13.04.16
21:55
(22) Для апдейта таблицы новыми записями. Не трогая имеющиеся. Дубли пропустит. Без ексепшена.
24 trad
 
13.04.16
23:51
(13) какой принцип определения значения ключевого поля новой строки?
25 D_Pavel
 
14.04.16
06:05
(17) Скопипастил сам не понял что.

UPDATE foo SET id=NULL;

Как ты к первичному ключу присваиваешь NULL? Это фантастика!
26 D_Pavel
 
14.04.16
06:09
(19) Хорошая ссылка. Спасибо!
27 D_Pavel
 
14.04.16
06:14
(24) Новое значение ключевого поля получается из сохраненного значения переменной плюс один. Значение переменной тоже увеличивается на единицу и сохраняется где-то в сервере.
28 D_Pavel
 
14.04.16
10:44
Есть еще хорошие идеи?
29 los_hooliganos
 
14.04.16
10:57
(28) Обойди курсором, сделай запросы в цикле
30 mingw
 
14.04.16
11:01
(25) Запросто присваиваю ключу NULL. Это временная таблица. Как в (14). Только синтаксис под mysql.
31 Жан Пердежон
 
14.04.16
11:08
http://dev.mysql.com/doc/refman/5.7/en/insert.html
3й вариант, закрывайте тему
32 mingw
 
14.04.16
11:20
(31) ... ON DUPLICATE KEY UPDATE
      id=NULL
?
да вариант вполне
33 D_Pavel
 
14.04.16
11:26
(30) (32) нельзя ключу присвоить NULL
34 mingw
 
14.04.16
11:27
(33) Мдя. Нет слов. Пусть кто другой найдет.
35 D_Pavel
 
14.04.16
11:27
Вот специально для тебя проверку запустил:

CREATE TEMPORARY TABLE foo AS SELECT * FROM list_queries WHERE id = 1602

Query executed OK, 1 row affected. (0.010 s)
UPDATE foo SET id=NULL

Error in query (1048): Column 'id' cannot be null
36 Господин ПЖ
 
14.04.16
11:28
нельзя просто так взять и присвоить null
37 Mikeware
 
14.04.16
11:30
(36) ему можно. Ему даже можно выезжать на переезд при закрытом шлагбауме и перед приближающимся поездом...
38 D_Pavel
 
14.04.16
11:35
(31) не третий, а второй. Молодец, хорошая ссылка
39 mingw
 
14.04.16
11:42
(35) Каким образом (и зачем) для временной таблицы указал примари кей?

(36) Иногда можно

(37) Смотря на чем выезжать.
40 D_Pavel
 
14.04.16
11:44
(39) Где я указывал для временной таблицы примари кей? Не вижу. Покажи откуда ты это взял.

Примари кей создается сам, потому что он указан для таблицы на основании которой создается временная.
41 mingw
 
14.04.16
12:42
(40) Ну так разреши NULL. Во временной.
42 D_Pavel
 
14.04.16
13:23
(41) Ну так это и был тот вариант который я придумал вначале. Но он мне не нравится из-за лишней возни. То создается не нужный ключ, потом его удалять надо. Не красиво.

Ничего лучше не придумать?
43 Cyberhawk
 
14.04.16
14:08
(27) Так это уже неуниверсально - вдруг первичный ключ не число или дата, а вдруг он еще и составной...
44 D_Pavel
 
14.04.16
20:18
(43) Первичный ключ не может быть датой
45 mingw
 
14.04.16
20:59
46 D_Pavel
 
15.04.16
08:38
(45) Однако может
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший