Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вставить значения из одной талицы в другую - в чем ошибка
 
 автор: zeta777   (15.09.2008 в 17:50)   письмо автору
 
 

Пытаюсь вставить значения из одной таблицы в другую, код

SELECT
table1.field1,
table1.field2,
table1.field3
FROM
table1
INNER JOIN table2 ON (table1.field1=table2.field1)
AND (table1.field2=table2.field2)
AND (table1.field3=table2.field3)

ничего не получается, ничего не вставляется. Где ошибка?

PS: таблицы по структуре разные, количество полей в них разное и сами поля тоже разные. Просто значения в некоторых из них должны быть одинаковы

  Ответить  
 
 автор: Trianon   (15.09.2008 в 18:32)   письмо автору
 
   для: zeta777   (15.09.2008 в 17:50)
 

вообще-то строки в таблицу вставляются оператором INSERT,
а меняются - оператором UPDATE.

  Ответить  
 
 автор: zeta777   (16.09.2008 в 11:37)   письмо автору
 
   для: Trianon   (15.09.2008 в 18:32)
 

То есть нужно

INSERT INTO table2 (field1, field2, field2)
SELECT field1, field2, field2 FROM table1

???

  Ответить  
 
 автор: zeta777   (16.09.2008 в 17:37)   письмо автору
 
   для: Trianon   (15.09.2008 в 18:32)
 

А как можно проапдейтить? Не подскажите синтаксис?


UPDATE table2 set table2.field2=(SELECT filed2 from table1 WHERE table2.field1=table1.field1);

работает нормально

А вот если нужно несколько полей проапдейтить - что-то не пойму.

UPDATE table2 set table2.field2=(SELECT filed2 from table1) AND table2.field3=(SELECT filed3 from table1) WHERE table2.field1=table1.field1;

Так? Или я чего-то с кавычками намудрила? Или все неверно?

  Ответить  
 
 автор: Trianon   (16.09.2008 в 17:51)   письмо автору
 
   для: zeta777   (16.09.2008 в 17:37)
 

>А вот если нужно несколько полей проапдейтить - что-то не пойму.
Тогда нужно сделать апдейт по соединению таблиц. Кстати, для одного поля тоже лучше применять соединение.

UPDATE 
    table1 JOIN table2 ON table2.field1=table1.field1
SET 
   table2.field2 = table1.field2, 
   table2.field3 = table1.field3

  Ответить  
 
 автор: zeta777   (16.09.2008 в 17:54)   письмо автору
 
   для: Trianon   (16.09.2008 в 17:51)
 

извиняюсь за тупизм, но которая таблица в данном случае проапдейтится? table1 или table2?

  Ответить  
 
 автор: Trianon   (16.09.2008 в 18:00)   письмо автору
 
   для: zeta777   (16.09.2008 в 17:54)
 

SET 
   table2.field2 = table1.field2, 
   table2.field3 = table1.field3


если бы были упомянуты обе таблицы - обновились бы поля в обеих.

  Ответить  
 
 автор: zeta777   (16.09.2008 в 18:06)   письмо автору
 
   для: Trianon   (16.09.2008 в 18:00)
 

Спасибо. Надо думать хоть немного, прежде, чем задавать глупые вопросы :)

  Ответить  
 
 автор: Root   (16.09.2008 в 18:02)   письмо автору
 
   для: zeta777   (16.09.2008 в 17:37)
 


UPDATE table2 AS t2, table1 AS t1
SET
t2.field2 = t1.field2,
t2.field3 = t1.field3
WHERE t2.field1 = t1.field1;

  Ответить  
 
 автор: zeta777   (16.09.2008 в 18:08)   письмо автору
 
   для: Root   (16.09.2008 в 18:02)
 

Спасибо и за этот вариант. Он вообще-то как-то привычнее.. А какой быстрее сработает? Записей-то мнооого будет...

  Ответить  
 
 автор: Trianon   (16.09.2008 в 18:13)   письмо автору
 
   для: zeta777   (16.09.2008 в 18:08)
 

Явно оговоренный JOIN ... ON ... как правило оптимизируется лучше.

  Ответить  
 
 автор: zeta777   (16.09.2008 в 18:50)   письмо автору
 
   для: Trianon   (16.09.2008 в 18:13)
 

Спасибо большое.

  Ответить  
 
 автор: Trianon   (16.09.2008 в 19:08)   письмо автору
 
   для: zeta777   (16.09.2008 в 18:50)
 

.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования