
我觉得应该使用merge比较好
merge
into
table_1
t1
using
table_2
t2
on(
t1id=t2id
and
t1idcard
='1111')
when
matched
then
update
name=t2name;
自己手动敲得没有验证,如不懂用法的话可以百度merge用法看一下就会了
这个可以做到,参考:
>
MySQL使用环境变量TMPDIR的值作为保存临时文件的目录的路径名。如果未设置TMPDIR,MySQL将使用系统的默认值,通常为/tmp、/var/tmp或/usr/tmp。如果包含临时文件目录的文件系统过小,可对mysqld使用“—tmpdir”选项,在具有足够空间的文件系统内指定1个目录。
在MySQL
51中,“—tmpdir”选项可被设置为数个路径的列表,以循环方式使用。在Unix平台上,路径用冒号字符“:”隔开,在Windows、NetWare和OS/2平台上,路径用分号字符“;”隔开。注意,为了有效分布负载,这些路径应位于不同的物理磁盘上,而不是位于相同磁盘的不同分区中。
如果MySQL服务器正作为复制从服务器使用,不应将“--tmpdir”设置为指向基于内存的文件系统的目录,或当服务器主机重启时将清空的目录。对于复制从服务器,需要在机器重启时仍保留一些临时文件,以便能够复制临时表或执行LOAD
DATA
INFILE *** 作。如果在服务器重启时丢失了临时文件目录下的文件,复制将失败。
MySQL会以隐含方式创建所有的临时文件。这样,就能确保中止mysqld时会删除所有临时文件。使用隐含文件的缺点在于,在临时文件目录所在的位置中,看不到占用了文件系统的大临时文件。
进行排序时(ORDER
BY或GROUP
BY),MySQL通常会使用1个或多个临时文件。所需的最大磁盘空间由下述表达式决定:
(length
of
what
is
sorted
+
sizeof(row
pointer))
number
of
matched
rows
2
“row
pointer”(行指针)的大小通常是4字节,但在以后,对于大的表,该值可能会增加。
对于某些SELECT查询,MySQL还会创建临时SQL表。它们不是隐含表,并具有SQL_形式的名称。
ALTER
TABLE会在与原始表目录相同的目录下创建临时表。
SQL Server可以用if exists来判断
存储过程
if exists(select 1 from sysobjects where name='存储过程名')
drop procedure 存储过程名
go
数据库表
if exists(select 1 from sysobjects where name='表名')
drop table 表名
go
IF exists(select 1 from sysdatabases where name='数据库名')
drop database 数据库名
go
索引
if exists (select 1 from sysindexes where name = '索引名')
drop index 表名索引名
go
视图
if exists (select 1 from sysindexes where name = '视图名')
drop view 视图名
go
总结一下:
查 存储过程、数据库表 使用 sysobjects 表,
查 数据库 使用 sysdatabases 表,
查 索引、视图 使用 sysindexes 表
这些是查系统表的,那么查普通表怎么查?嗯
if exists(select 1 from 表名 where 条件)
[begin] --begin和end 相当于“{}”存在,把后面多句整合成一个整体
要做的 *** 作
[end]
go
PS1:if exists这个语法貌似还有其他的用法,建议去查一查,很好用很好用,用会了会上瘾我会说?
PS2:这个go挺好用,像断点,他会把前面一个go和后面一个go之间的代码运行生效后才会继续运行后面的代码,比如:刚进入SQL Server的时候默认是进入master库,先看看下面2段语句的结果
use bbs
create table 1
go
和
use bbs
go
create table 1
go
第一句 会在master建一个table1,然后进入bbs库;第二句 会进入bbs库 然后在bbs库建table1表
PS2:select 1 from。。。。这里的1主要是加快搜索速度,这种只查询是否存在的情况下,如果查到数据就显示1,这样可以大大地加快搜索速度,查询的结果是有多少条数据就有多少个1
t_ItemClass这个表中插入数据的时候,发现有主键重复的现象,导致后续的数据无法插入。
这个表有个主键“PK_ItemClass”对应的字段应该是FItemClassID吧,你插入数据之前判断了重复,但是是通过复合条件判断的,FItemClassID+fname,数据库里没有FItemClassID=2021 and fname='计划项目'的记录不代表没有FItemClassID=2021的记录呀,FItemClassID是主键,必须保证其唯一性。
这个不需要这么麻烦,除非是必须要用存储过程来做,一句话就可以做了
SQL>
create
table
t1(riqi
date)
;
Table
created
SQL>
insert
into
t1
values(sysdate)
;
1
row
created
SQL>
insert
into
t1
values(sysdate-1)
;
1
row
created
SQL>
insert
into
t1
values(sysdate-2)
;
1
row
created
SQL>
commit
;
Commit
complete
SQL>
select
from
t1
;
RIQI
---------
11-SEP-10
10-SEP-10
09-SEP-10
SQL>
alter
table
t1
add
column_no
number
;
Table
altered
SQL>
merge
into
t1
using
(select
rownum
rn,riqi
from
t1
order
by
riqi)
t
on
(tr
iqi
=
t1riqi)
2
when
matched
then
update
set
t1column_no=trn
3
when
not
matched
then
insert
values(triqi,trn)
;
3
rows
merged
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
select
from
t1
;
RIQI
COLUMN_NO
---------
----------
11-SEP-10
1
10-SEP-10
2
09-SEP-10
3
以上就是关于sql 在2个表中筛选出另外一个表对应相同字段没有的数据全部的内容,包括:sql 在2个表中筛选出另外一个表对应相同字段没有的数据、C#中同时 *** 作两个ms sql数据库合并表的问题、MySQL数据库的临时文件究竟储存在哪里等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)