添加记录时,表的其中一个字段需要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语句中应该怎么写啊?的主要内容,如果未能解决你的问题,请参考以下文章
oracle 如何根据一个表中记录的变动更新另外一个表中相应的字段