2013-12-10 2 views
-2

У меня есть две таблицы t и t1. Говорят, что t содержит следующие данныеMysql Query - вставка новых данных

id name a b c o p 
1 'John' 1 1 1 23 5 

и t1

id1 a1 b1 c1 o1 
1 6 7 2 23 
2 9 3 7 23 
3 25 7 12 2 

Я ищу, чтобы получить таблицу t после некоторых операций, как в следующем примере:

id name a b c o 
1 'John' 1 1 1 23 
2 'John' 6 7 2 23 
3 'John' 9 3 7 23 

Моя цель вставьте новые столбцы в t, где t1.o1=t.o.

Любая идея? Мне нужно использовать хранимую процедуру?

+0

В таблице 't1' нет столбца с именем' o'. – P5Coder

+0

вы можете копировать равные записи, используя ниже sql 'code'INSERT INTO t SELECT * FROM t1 WHERE t1.o = t.o;
попробуйте. надеюсь, что это сработает. – HackerGK

+0

Пожалуйста, укажите точную схему таблицы для таблицы 't' как' CREATE TABLE ... ' – peterm

ответ

1

Вы можете сделать следующее,

insert into t (name,a,b,c,o,p) (select name,a1,b1,c1,o1,p from t1 inner join t on t.o=t1.o1); 

Предполагая, что вы все еще нужно столбец в таблице р т.

http://sqlfiddle.com/#!2/efb65/1

только заметил последовательность в результирующей таблице таким образом обновленный ответ соответственно, предполагая автоматическое приращение t.id http://sqlfiddle.com/#!2/a97c06/1

В противном случае вам нужно будет опустить столбец первой, а затем вставить значения.

ALTER TABLE t DROP p; 
insert into t (name,a,b,c,o) (select name,a1,b1,c1,o1 from t1 inner join t on t.o=t1.o1); 

http://sqlfiddle.com/#!2/ddccc/1

+0

Согласно тому, что пользователь запросил в этом примере, столбец идентификатора не должен иметь повторяющихся значений, но это не так в вашей скрипке. –

+1

@AlbertoSolano да только что заметил, что и обновил ответ, спасибо – melc

+0

@melc Почему нам нужно выбрать значение для столбца p, так как это не задано в вопросе? благодаря ! – Christos

0
INSERT INTO tableName 
SELECT t.id, t.name, t.a, t.b, t.c, t.o 
FROM t 
INNER JOIN t1 ON t.o=t1.o1 

tableName - это название таблицы, в которую вы хотите вставить свои данные. Запрос под вставкой в ​​оператор, выбирает данные, которые вы хотите вставить в таблицу.

Если вам нужно вставить эти значения в таблицу т, то вы должны использовать следующий код:

INSERT INTO t (id, name, a, b, c, o) 
SELECT t.id, t.name, t.a, t.b, t.c, t.o 
FROM t 
INNER JOIN t1 ON t.o=t1.o1 
+0

Могу ли я использовать код выше, если tableName = t? – user3014966

+1

@ user3014966 Нет, так оно и есть, оно нуждается в некоторых изменениях. Дайте мне несколько секунд, чтобы опубликовать соответствующий код. – Christos

-1

Это может помочь вам MySQL Insert Where query

INSERT INTO t 
SELECT t1.o1 
FROM AnotherTable 
INNER JOIN t on t.o=t1.o1 
+0

Как насчет других столбцов? –

2

Вы можете вставить данные, которые вы хотите от таблицу t1 к таблице t, используя этот код:

INSERT INTO t (name, a, b, c, o) 
SELECT t.name, t1.a1, t1.b1, t1.c1, t1.o1 
FROM t1 
INNER JOIN t on t1.o1 = t.o 

Вы не сказали, что столбец id таблицы t имеет включенную опцию AUTO_INCREMENT. Я полагаю, что этот параметр включен.

+0

Почему downvote? –

+0

Это немного сложно. В 't1' нет столбца' id'. Во-вторых, столбец 'id' в' t' содержит не дублирующиеся значения. –

+0

@ RavindraGullapalli Mmm..I исправил свою ошибку. Да ты прав. Мне нужно немного просмотреть запрос. Благодаря! –

1

Трудно сказать наверняка, не видя точную схему таблицы для таблицы t, но при условии, что id колонны является auto_increment колонны и p столбца NULL способен

INSERT INTO t (name, a, b, c, o) 
SELECT t.name, t1.a1, t1.b1, t1.c1, t1.o1 
    FROM t1 JOIN t 
    ON t1.o1 = t.o; 

SQLFiddle demo

1

Вы можете сделать это. SQL Fiddle is here

SELECT @rownum := 0; 
    INSERT INTO t 
    SELECT t.id+(@rownum := @rownum + 1), t.name, t1.a1, t1.b1, t1.c1, t1.o1, t.p 
    FROM t1 
    INNER JOIN t on t1.o1 = t.o; 
Смежные вопросы