SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.06.2011 15:10:51

Nunkomm
Участник
Зарегистрирован: 22.06.2011
Сообщений: 3

Как присвоить значение одного поля другому?

Здравствуйте.
В БД форума vBulletin есть таблица attachment. В ней есть поля attachmentid и importattachmentid. Как сделать так, чтобы в поле attachmentid стали значения из importattachmentid (т.е. продублировались значения)?
Заранее огромное спасибо.
С уважением.

Неактивен

 

#2 22.06.2011 15:33:24

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Как присвоить значение одного поля другому?

UPDATE `attachment` set `attachmentid` = `importattachmentid`;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 22.06.2011 16:18:13

Nunkomm
Участник
Зарегистрирован: 22.06.2011
Сообщений: 3

Re: Как присвоить значение одного поля другому?

deadka написал:

UPDATE `attachment` set `attachmentid` = `importattachmentid`;

ОГРОМНОЕ спасибо. То, что нужно.

Неактивен

 

#4 29.06.2011 11:55:43

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: Как присвоить значение одного поля другому?

Nunkomm написал:

deadka написал:

UPDATE `attachment` set `attachmentid` = `importattachmentid`;

ОГРОМНОЕ спасибо. То, что нужно.

не стал начинать новую тему, задача похожа на эту только поля `attachmentid`,`importattachmentid` находятся в разных таблицах. Ключа, по которому можно сделать

USING или ON нет.
В таблице назначения я как раз хочу создать такой ключ и взять его из другой таблицы.
т.е. допустим есть у нас таблица attachment и attachment_import
нужно наложить данные из attachment_import.importattachmentid на attachment.attachmentid
не знаю как сделать это без процедуры с курсорами, можно ли это сделать обычным запросом?

Неактивен

 

#5 29.06.2011 14:39:49

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как присвоить значение одного поля другому?

UPDATE attachment_import, attachment
SET attachment.attachmentid = attachment_import.importattachmentid
WHERE условие связи таблиц

Неактивен

 

#6 29.06.2011 18:43:28

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: Как присвоить значение одного поля другому?

paulus написал:

UPDATE attachment_import, attachment
SET attachment.attachmentid = attachment_import.importattachmentid
WHERE условие связи таблиц

если бы было так всё просто...
Конкретный пример:

CREATE TABLE table1(
 parent_id INT NOT NULL DEFAULT 0,
 name1 VARCHAR(32) NOT NULL DEFAULT ''
) ENGINE MYISAM;

CREATE TABLE table2(
 parent_id INT NOT NULL DEFAULT 0,
 ff INT NOT NULL DEFAULT 0,
 name2 VARCHAR(32) NOT NULL DEFAULT ''
) ENGINE MYISAM;


Закинул данные:
mysql> select * from table1;
+-----------+-------+
| parent_id | name1 |
+-----------+-------+
|         0 | a     |
|         0 | b     |
|         0 | c     |
|         0 | d     |
|         0 | e     |
|         0 | f     |
+-----------+-------+
6 rows in set (0.00 sec)

mysql> SELECT * FROM table2 AS t2 WHERE t2.ff=1;
+-----------+----+-------+
| parent_id | ff | name2 |
+-----------+----+-------+
|         1 |  1 |       |
|         2 |  1 |       |
|         3 |  1 |       |
|         4 |  1 |       |
|         5 |  1 |       |
|         6 |  1 |       |
|         7 |  1 |       |
+-----------+----+-------+
7 rows in set (0.00 sec)


Делаем наш update:
mysql> UPDATE table1 AS t1,table2 AS t2 SET t1.parent_id=t2.parent_id WHERE t2.ff=1;
Query OK, 6 rows affected (0.00 sec)
Rows matched: 6  Changed: 6  Warnings: 0


Видим проблему:
mysql> select * from table1;
+-----------+-------+
| parent_id | name1 |
+-----------+-------+
|         1 | a     |
|         1 | b     |
|         1 | c     |
|         1 | d     |
|         1 | e     |
|         1 | f     |
+-----------+-------+
6 rows in set (0.00 sec)
 

Неактивен

 

#7 29.06.2011 19:04:52

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Как присвоить значение одного поля другому?

Никакой проблемы нет.
Вам же paulus писал что  после WHEREдолжно быть "условие связи таблиц"
А у вас условия связи нет ...
Попытайтесь правильно изложить задачу.
Или хотя бы в вашем примере, покажите какой результат вы хотели бы получить.

Отредактированно evgeny (29.06.2011 19:05:30)

Неактивен

 

#8 29.06.2011 21:39:17

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: Как присвоить значение одного поля другому?

Ок. Я имел ввиду, что я ожидал результат вот такой:

mysql> select * from table1;
+-----------+-------+
| parent_id | name1 |
+-----------+-------+
|         1 | a     |
|         2 | b     |
|         3 | c     |
|         4 | d     |
|         5 | e     |
|         6 | f     |
+-----------+-------+
6 rows in set (0.00 sec)
 


Связи у таблиц до запроса нет, я эту связь хочу создать.
Возможно ли сделать это обычным запросом(т.е. без применения триггеров и процедур)?

Отредактированно Golova (29.06.2011 21:40:58)

Неактивен

 

#9 30.06.2011 11:52:50

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Как присвоить значение одного поля другому?

Может вы просто пытаетесь пронумеровать таблицу  table1 ?

ALTER TABLE table1 AUTO_INCREMENT = 1;

ALTER IGNORE TABLE table1
CHANGE `parent_id` `parent_id` INT(11) AUTO_INCREMENT,
ADD PRIMARY KEY(`parent_id`);

ALTER IGNORE TABLE table1
  CHANGE `parent_id` `parent_id` INT(11) NOT NULL,
  DROP PRIMARY KEY;

Если нет, то в table1 по любому должно быть уникальные поле.

Неактивен

 

#10 30.06.2011 20:19:20

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: Как присвоить значение одного поля другому?

Нет, я не просто хочу пронумеровать table1.parent_id. Я хочу наложить данные из столбца table2.parent_id на столбец table1.parent_id.
Данные в table2.parent_id произвольные числа.

Неактивен

 

#11 30.06.2011 21:27:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как присвоить значение одного поля другому?

Произвольные, но всегда разные, или произвольные, и могут повторяться?

Неактивен

 

#12 30.06.2011 22:52:18

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: Как присвоить значение одного поля другому?

paulus написал:

Произвольные, но всегда разные, или произвольные, и могут повторяться?

всегда разные.

Неактивен

 

#13 30.06.2011 23:51:04

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Как присвоить значение одного поля другому?

Если поле table1.name1 уникальное, то можно так поизвращаться. Или создать другое уникальное поле, например autoincriment id.

В общем вот сам запрос:


SET @a:=0,@b:=0;
UPDATE table1 z1,
(SELECT (@a:=@a+1) rowid,name1,parent_id FROM table1) t1,
(SELECT (@b:=@b+1) rowid,name2,parent_id FROM table2 where ff=1) t2
SET  z1.parent_id=t2.parent_id WHERE z1.name1=t1.name1 AND t1.rowid=t2.rowid;
 


Пример рабочий, но возможно его можно немного укоротить.

Отредактированно evgeny (30.06.2011 23:52:42)

Неактивен

 

#14 01.07.2011 01:14:12

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: Как присвоить значение одного поля другому?

просто замечательно! то что надо! Преогромное спасибо!

p.s. пытался уже было решить эту задачу с помощью процедуры и двух курсоров, но к сожалению для себя обнаружил что курсоры в MYSQL то READ ONLY...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson