Вставить данные из другой таблицы с циклом в MySQL - PullRequest
6 голосов
/ 14 сентября 2011

Я мог бы решить эту проблему с помощью php или другого языка, но я бы хотел больше изучать SQL.

Есть ли способ решить эту проблему:

У меня есть две таблицы (и я не могу изменить структуру), одна content с некоторыми данными и другая content_info с некоторымиДополнительная информация.Они связаны следующим образом: content.id = content_info.content_id.

Что я хотел бы сделать: если в content_info нет набора данных, но в content, я хотел бы скопировать его в концев обеих таблицах одинаковое количество наборов данных.Я попробовал это таким образом, но, к сожалению, это не работает:

...
BEGIN
  (SELECT id, ordering FROM content;)
  cont:LOOP
    @cid = SELECT content_id FROM content_info WHERE content_id = (id)
    IF @cid != (id) THEN
      INSERT INTO content_info SET content_id = (id), ordering = (ordering)
      ITERATE cont;
    END IF;
  END LOOP cont;
END
..

У кого-то есть идея, или это не возможно в конце?Заранее спасибо!

Ответы [ 3 ]

8 голосов
/ 14 сентября 2011

Вы можете использовать INSERT IGNORE для вставки новых строк, но ничего не делать, если в таблице уже есть строка, которая может вызвать ошибку повторяющегося ввода.

INSERT IGNORE INTO jos_content_frontpage (content_id, ordering)
SELECT id, ordering FROM jos_content
2 голосов
/ 14 сентября 2011

Похоже, вы ищете синтаксис INSERT ... SELECT. Любой выбор может быть вставлен в таблицу, если вы отформатируете данные в соответствии с целевой таблицей.

Кроме того, ваш синтаксис INSERT неверен, похоже, вы используете синтаксис UPDATE.

INSERT INTO table (field1, field2, field3) VALUES ('1','2','3');

INSERT INTO table (field1, field2, field3) SELECT field1, field2, field3 FROM ...
1 голос
/ 14 сентября 2011

Я приведу пример только для одного поля, поля id. Вы также можете добавить другие поля:

insert into content_info(content_id)
select content.id
from content left outer join content_info
on (content.id=content_info.content_id)
where content_info.content_id is null

другой способ

insert into content_info(content_id)
select content.id
from content 
where not exists (
     select *
     from content_info
     where content_info.content_id  = content.id 
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...