Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql查询-插入新数据_Mysql_Sql - Fatal编程技术网

Mysql查询-插入新数据

Mysql查询-插入新数据,mysql,sql,Mysql,Sql,我有两个表t和t1。 假设t包含以下数据 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

我有两个表
t
t1
。 假设
t
包含以下数据

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

有什么想法吗?我需要使用存储过程吗

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,则应使用以下代码:

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
这可能对你有帮助


您可以使用以下代码将所需数据从表
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

您没有说明表
t
id
列是否启用了该选项。我想此选项已启用。

您可以执行以下操作:

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);
假设您仍然需要表t中的p列

刚刚注意到结果表中的序列,因此相应地更新了答案,假设t.id自动递增

否则,需要先删除列,然后插入值

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);

如果没有看到表
t
的确切表模式,就很难确定,但是假设
id
列是一个
自动增量列,并且
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;

这是您可以这样做的演示。SQL Fiddle是


在表
t1
中没有名为
o
的列。您可以使用下面的sql
code
将相同的记录复制到t SELECT*中,其中t1.o=t.o<试试看。希望能起作用。请将表
t
的确切表模式显示为
CREATE table…
如果tableName=t,我可以使用上面的代码吗?@user3014966不,它需要一些更改。给我几秒钟时间发布相应的代码。这有点棘手。
t1
中没有可用的
id
列。其次,
t
中的
id
列包含不重复的值。@RavindraGullapalli Mmm..我修复了我的错误。是的,你说得对。我需要回顾一下这个问题。谢谢@RavindraGullapalli更新了答案。根据用户在示例中的请求,ID列不应该有重复的值,但在您的小提琴中不是这样。@Albertoslano yes刚刚注意到了这一点并更新了答案,thanks@melc为什么我们需要选择p列的值,因为问题中没有提出这个问题?谢谢@Christopaisios您是对的,没有指定。结果表根本没有提到p列,因此假设可能需要删除该列。此外,如果该列被排除在外,则将插入空值,这可能很好,具体取决于要求。其他列呢?
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;
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;