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
的列。您可以使用下面的sqlcode
将相同的记录复制到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;