2016-01-11 1 views
0

У меня есть две таблицы. В таблице 1 (таблица_1) у меня есть id, category_name и category_id. Здесь установлен только id. В другом (таблица_2) у меня есть article_id, content_id и tag_name.Вставьте все экземпляры значений из одной таблицы в новую

Теперь из table_1 и table_2 мне нужно поставить content_id и tag_name из второй в первую таблицу category_id и category_name. Это можно сделать так:

UPDATE table_1 
INNER JOIN table_2 ON table_2.article_id = table_1.id 
SET table_1.category_id = table_2.content_id 

UPDATE table_1 
INNER JOIN table_2 ON table_2.article_id = table_1.id 
SET table_1.category_name = table_2.tag_name 

Я попытался добавить AND и добавить table_1.category_name = table_2.tag_name, но я ничего не получил, так что я разделил два запроса.

Но вопрос у меня есть, что в моей второй таблице, я могу иметь несколькоcontent_id «S, присоединенные к тому же article_id (несколько категорий в той же статье), и выше я буду получать только один целое положил в category_id для статьи в первой таблице.

table_2, например:

article_id content_id tag_name 
================================ 
21596  156   Tag Name 
21596  16   Second 
26189  156   Tag Name 

Как я могу обновить значения из одной таблицы в другую, если нет взаимно-однозначного соответствия? Кроме того, могут ли эти значения разделяться запятой?

РАЗЪЯСНЕНИЕ

Что мне нужно, это способ вывести оба tag_name с и content_id сек из второй таблицы в первой таблице и есть что-то вроде

table_1:

id   category_id category_name 
========================================= 
21596  156, 16  Tag Name, Second 
26189  156   Tag Name 

ОБНОВЛЕНИЕ

Хорошо, так что я нашел способ, чтобы получить всю информацию сцепляются в один из второй таблицы, мне просто нужно, чтобы включить это как-то в мой запрос обновления

SELECT article_id, group_concat(tag_name ORDER BY tag_name, content_id) AS tag_name, group_concat(content_id ORDER BY tag_name, content_id) AS tag_id 
FROM table_2 
GROUP BY article_id 

ответ

1

это будет работать

UPDATE table_1 
INNER JOIN table_2 ON table_2.article_id = table_1.id 
SET table_1.category_id = table_2.content_id, table_1.category_name = table_2.tag_name 

UPDATE

В оракуле мы можем достичь с помощью функции LISTAGG, которая в основном объединяет столбцы на основе группы.Mysql имеет принять аналог смотреть на эту Thread

create table temp 
(
     article number(2), 
     test varchar2(30) 
) 

insert into temp values(1, null); 

create table temp_table 
(
     article number(2), 
     test varchar2(10) 
) 
insert into temp_table values(1, 'System'); 
insert into temp_table values(1, 'Source'); 
update temp t 
     set t.test = (
        select LISTAGG(test) WITHIN GROUP (order by test) from temp_table tt 
            where tt.article = t.article 
            group by 
            tt.article) 

Result

+0

Возможно, я знаю, почему его downvoted – saikumarm

+0

Я поддержал вас, потому что это работает (для отмены downvote), но вопрос был не о нескольких запросах. Вопрос в том, можно ли присвоить именам нескольких категорий и идентификаторам первой таблицы. –

+0

Есть ли решение без Oracle? Я запрашиваю у phpmyadmin простую базу данных mysql –

1

Ok, так что ответ делает два обновления один для одного столбца, и один для второй колонки (может быть, есть способ объединить тех, два, но до сих пор это работает)

UPDATE 
    table_1 
    JOIN (SELECT article_id, GROUP_CONCAT(tag_name ORDER BY tag_name, content_id) AS tag_name 
FROM table_2 
GROUP BY article_id) table_2 
    ON table_1.id = table_2.article_id 
SET table_1.category_name = table_2.content_name 

Я обновляю первую таблицу, но до того, что я конкатенацию tag_name во второй таблице, так что я получаю все тег для одной статьи. Затем я просто устанавливаю эти значения в первой таблице.

То же самое для id работает.

Смежные вопросы