SQL如何将值插入对应实体号EntityID的最后一行,表如下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL如何将值插入对应实体号EntityID的最后一行,表如下相关的知识,希望对你有一定的参考价值。

如下表,例如向该表插入一个UserCode为T321的新用户,那么对应的A的Ordinal应该为3,B为4,C为2,D为5,思路如何?求解!

insert into table select ‘XXXX’,max(ordinal)+1,'T321' from table where entityid='XXXX';
类似这样,应该就可以了。
其中XXXX就是你对T321用户的entityid的输入。XXXX是变量,你输入什么,那么这里就显示什么。
后面的T321也是变量,也是你输入什么就显示什么。只有中间的max(ordinal)+1是求出来的。
这个也可以用存储过程实现,大概意思差不多。关键看你的entityid的分组是什么追问

我的提问有些问题,这是我更正后的问题,下面这句话报错,要这么写才对?

表名为AMTEMP

INSERT INTO AMTEMP SELECT B.Entity,max(A.Ordinal)+1,'T172'

from AMTEMP A,AMTEMP B WHERE B.UserCode='T123' GROUP BY A.Entity

追答

你这是在干啥?
SELECT B.Entity,max(A.Ordinal)+1,'T172'
from AMTEMP A,AMTEMP B WHERE B.UserCode='T123' GROUP BY A.Entity
你是想干什么,我们看懂,你想每一个都加1么?
出现
1 3 T172
2 4 T172
3 5 T172
可能还有
4 6 T172等
是这个意思么?
按照你给的表的逻辑判断,编号小的entity的usercode值包含在编号大的中,我姑且写一个你试试。
insert into AMTEMP SELECT entity,max(ordinal)+1,'T172' from AMTEMP group by entity
如果逻辑不是以上内容,那么就要重新判定了。
比如,如果你说的是包含有usercode=‘T123’的entity才要进行插入,其他的entity不插入,那就要加一个in了,或者hash查询也可以。
写法大概是(insert部分不写了)
select entity,max(ordinal)+1,'T172' from AMTEMP where entity in (select entity from AMTEMP where usercode='T123') group by entity
或者
select A.entity,max(A.ordinal)+1,'T172' from AMTEMP A,AMTEMP B where B.entity=A.entity and B.usercode='T123' group by A.entity
最后这个跟你的写法相近,你要的是这个吧。

参考技术A 没搞懂你要怎么操作,单单只需要插入一个UserCode吗?还是说EntityID和Ordinal这2个字段也是需要插入的?
create table tab_test
(Ordinal VARCHAR2(1),
EntityID VARCHAR2(1),
UserCode VARCHAR2(4));

declare
v_Ordinal VARCHAR2(1);
v_EntityID VARCHAR2(1) :='&EntityID';
v_UserCode VARCHAR2(4) :='&UserCode';
begin
insert into tab_test(EntityID,UserCode)
values(v_EntityID,v_UserCode);
commit;
select
max(Ordinal) + 1
into v_Ordinal
from tab_test
group by v_EntityID;
update tab_test t set Ordinal = v_Ordinal where UserCode = v_UserCode;
end;

Oracle 中PL/SQL的写法,不知道能不能帮到你追问

我的提问有些问题,这是我更正后的问题,下面这句话报错,要这么写才对?

表名为AMTEMP

INSERT INTO AMTEMP SELECT B.Entity,max(A.Ordinal)+1,'T172'

from AMTEMP A,AMTEMP B WHERE B.UserCode='T123' GROUP BY A.Entity

追答

你查了2张表,虽然是同一个表,但是你也要关联下啊:
INSERT INTO AMTEMP SELECT B.ENTITY,MAX(A.ORDINAL)+1,'T172'
FROM AMTEMP A,AMTEMP B WHERE A.USERCODE = B.USERCODE AND B.USERCODE='T123' GROUP BY A.ENTITY;

试试这样

追问

你和我犯了同样的错误,上面这条语句我也试过,但是一直报一个错:"选择列表中的列 'AMTEMP.Entity' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。"虽然关联了,但是错就错在SELECT B.ENTITY应该改为SELECT A.ENTITY就对了,最后,非常感谢你的回答,谢谢!

参考技术B 用group by和max()+1,然后再insert追问

我的提问有些问题,这是我更正后的问题,下面这句话报错,要这么写才对?

表名为AMTEMP

INSERT INTO AMTEMP SELECT B.Entity,max(A.Ordinal)+1,'T172'

from AMTEMP A,AMTEMP B WHERE B.UserCode='T123' GROUP BY A.Entity

将值插入具有DATETIME列的表中

INSERT INTO visning ( film, tidspunkt, sal, pris) VALUES (1, “2017-12-15 20:30:00”, 10, 150);

当我输入此查询时,我得到一个错误:

错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的'20:30:00”,10,150)'附近使用正确的语法]

我在这里输入错了什么?

[插入观看(电影,短片,萨尔,普里斯)价值(1,“ 2017-12-15 20:30:00”,10,150);输入此查询时,出现错误:ERROR 1064(42000):您的SQL语法有错误。检查...

答案

尝试使用正确的str_to_date格式并在字符串周围使用引号引起来

以上是关于SQL如何将值插入对应实体号EntityID的最后一行,表如下的主要内容,如果未能解决你的问题,请参考以下文章

EF - 对于已创建的实体:无法将值 NULL 插入“Id”列、“Languages”表;列不允许空值

将值插入具有DATETIME列的表中

将值插入光标所在的最后一个文本区域

使用 PL/SQL 将值插入全局临时表

如何使用具有多个结果的子查询将值插入表中?

通过 PHP 将值插入 SQL [关闭]