添加记录时,表的其中一个字段需要SELECT另外两个表来确定其值,那么INSERT语句中应该怎么写啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加记录时,表的其中一个字段需要SELECT另外两个表来确定其值,那么INSERT语句中应该怎么写啊?相关的知识,希望对你有一定的参考价值。

使用的是SQLSERVER 2000

create table test1
(
id int identity(1,1),
name varchar(20),
age int
)
create table test2
(
id int,
name varchar(20),
age int
)
create table test3
(
id int,
name varchar(20),
age int
)

declare @name varchar(20)
,@age int
select @name=name from test2 where id=1
select @age=age from test3 where id=2
insert test1(name,age) values(@name,@age)

说明:test1,test2,test3是表名.
您只需要把id=1,id=2换成您想要的条件即可.
这个条件即决定您想要在另外两张表取出的数据.
wish help.
参考技术A 添加记录时,表的其中一个字段需要SELECT另外两个表来确定其值,那么INSERT语句中应该怎么写啊?

INSERT [表名] SELECT [字段名],[字段名].....FROM [表1] A,[表2] B WHERE A.[关联列]=B.[关联列]

mysql熟悉

基本语法和其它的没啥差别

多表查询中之前有几个搞不懂的地方

类似于 之前在学校学SQL server的时候,笛卡尔积究竟是啥东西。。求两个表的笛卡尔积只知道把记录相乘。。却不知道sql语句怎么写。

今天才知道。

原来

select * from A,B

不加任何条件,结果就是笛卡尔积。

如果需要两张表关联,就将它们的关联字段设成条件。

select * from A,B where A.id = B.aid

如果关联时想保留A表的全部记录,就使用A左连接B或者B右连接A。

select * from A a left join B b on a.id = b.aid 

 

外连接

  包括左外连接、右外连接、全外连接。其实就是 left outer join ,outer可以省略罢了。

内连接

  inner join on相当于where 里面写关联条件。

  select * from A a inner join B b on a.id = b.aid  相当于 select * from A,B where a.id = b.aid

外连接也就是比内连接多保留了两张表中没有过滤掉的记录。

如果想保留A,B中所有的记录,连接不上的置空,就用全外连接(但是Mysql不支持全外连接,可以用union来组合)

 

有些表中不好关联,比如 两张表同时通过某一字段和第三张表的一个字段iidd有对应关系。那么如果通过

select * from A a,B b,C c where a.id = c.iidd and b.id = c.iidd

这样一般是不符合业务逻辑的。通过a.id和c.iidd关联后,已经筛选掉了C表中其它B表可以关联的记录,然后再和B表关联,最终结果通常会缺少数据。

这时我们考虑到既然都要和C表关联,那么C表的记录在最后一次被关联前是不能缺少的。这样很明显使用左关联或右关联首先来保存C表数据,然后得到一张虚表后再和B表关联。

select * from (select * from A a right join C c on a.id = c.iidd),B b where a.id = b.iidd

这样又会产生一个问题,A表和C表右关联后的结果集,被B表的Id所筛选,导致A表关联后的数据缺少,这里的业务逻辑一般是取A表与C的关联记录和B与C的关联记录。

所以说继续使用外关联,可以得到目标数据。

select * from ((select * from A a right join C c on a.id = c.iidd) ac left join B b on ac.id = b.id)

 

______________

以上sql只为了归纳个人思想。不保证执行。

 

 

写的顺序:select ... from... where.... group by... having... order by.. 
执行顺序:from... where...group by... having.... select ... order by...

 


以上是关于添加记录时,表的其中一个字段需要SELECT另外两个表来确定其值,那么INSERT语句中应该怎么写啊?的主要内容,如果未能解决你的问题,请参考以下文章

mysql中的onwherehaving

oracle 如何根据一个表中记录的变动更新另外一个表中相应的字段

mysql熟悉

从另一个表的多条记录更新一个表中的一条记录。其中一个表的列名是另一个表的字段

ORM 多表操作

ORM 多表操作