用一条sql语句实现:存在则啥都不干,不存在,则插入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用一条sql语句实现:存在则啥都不干,不存在,则插入相关的知识,希望对你有一定的参考价值。

用一条sql语句实现:存在则什么都不干,不存在,则插入
用一条sql语句怎么实现?

1、首先准备两个数据表,如下图所示,结构需要一样。

2、接着往第一个数据表先插入一些数据。

3、将第一个中的插入进来。

4、接着编写插入语句,注意这次直接在insert后面用select获取数据。

5、然后我们就可以看到第二个数据表中有数据了。

6、最后再进行select查询数据的时候还可以用where进行筛选。

参考技术A

用以下的SQL语句结构:

insert into table_name (field_name1, field_name2, ...) 
select value_1, value_2, ...    -- 获取值的查询, 可以固定值,也可以查表或视图
where not exists (
    ...            -- 判断存在的查询
)

具体的查询语句要根据不同的数据库做调整(例如Oracle要求select语句后面必须有表或视图,没有的话也要用dual替代)。

其实,就是一个查询语句,根据你的条件得到查询的结果,然后将查询结果插入到表中而已。

参考技术B if not object_id(N'Tempdb..#T') is null-- 判断临时表是否存在
if NOT EXISTS(SELECT * FROM TABLE WHERE ...)-- 判断数据是否存在(这个其实有很多方式)
THEN 
inert into TABLE values()
这个就可以表示不存在

参考技术C 如果是表与表之间的关系,那么用merge语句就行。
如果是新插入的内容,要用insert values插入的,那就没有办法了,只能是前面加一个判断。
参考技术D if not exists (select * from TABLE_NAME where COLUMN_NAME=value )
用exists去判断

假定判断的列是:COLUMN_NAME
insert into TABLE_NAME (COLUMN_NAME1,COLUMN_NAME2)
select COLUMN_NAME1,COLUMN_NAME2 from TABLE_NAME where COLUMN_NAME not in (select COLUMN_NAME from TABLE_NAME )

使用 not in ,就是COLUMN_NAME不在 TABLE_NAME 的COLUMN_NAME中,执行insert into

如何使用一条mysql语句实现如果查询到的数据不存在就创建

有这样一个表log,字段有id(主键)、date、ip,现在我要插入一条记录,前提是数据库上是没有者条记录的,但有一个特别的地方,就是比如我现在的表中有记录:(我这个表主要统计每天有多个ip)
id date ip
1 2014-01-01 192.168.1.1
2 2014-01-02 192.168.1.2
如果我插入的是2014-01-03 192.168.1.2这条记录,因为这条在数据库上没有,就可以写入数据库。
如果我插入的是 2014-01-02 192.168.1.2这条记录,因为这条在数据库上有,就不可以写入数据库。
我就想要一条语句,实现以上功能

你把这张表的 date和ip字段联合设置为唯一索引。

ALTER TABLE `log` ADD UNIQUE `date_ip` (`date`, `ip`);

然后你就大胆的insert数据吧。有重复的就报错插入失败。然后接着插入下一条就OK。

参考技术A 一条语句实现的方法不如存储过程方便,而且不如存储过程效率高,楼主写个存储过程会比较好

INSERT INTO log (date, ip) SELECT '2014-01-01' as date, '192.168.1.1' as ip FROM log WHERE NOT EXISTS ( SELECT * FROM log t WHERE t.data = '2014-01-01' AND t.ip = '192.168.1.1')本回答被提问者采纳
参考技术B

-- 我这里假设你那个  id 是 自动递增的主键.

INSERT INTO log (date,  ip)
SELECT  '2014-01-01', '192.168.1.1' 
FROM  dual
WHERE  NOT  EXISTS (
  SELECT *
  FROM log  t
  WHERE  t.data = '2014-01-01'  AND  t.ip = '192.168.1.1'
)

参考技术C mysql 有判断语法

有四种方式进行判断:1. SHOW TABLES LIKE '%tb_bp_d_case%';2. select TABLE_NAME from INFORMATION_SCHEMA.TABLES whereTABLE_SCHEMA='dbname' and TABLE_NAME='tablename' ;3. 如果表不存在就建立这个表,那么可以直接用 create table if not exists tablename 这样的指令来建立,不需要先去查询表是否存在。4. 从模板表创建表:create table if not exists like old_table_name;

自己去套
参考技术D INSERT INTO log (date, ip) SELECT '2014-01-01' as date, '192.168.1.1' as ip FROM log WHERE NOT EXISTS (
SELECT *
FROM log t
WHERE t.data = '2014-01-01' AND t.ip = '192.168.1.1'
)

以上是关于用一条sql语句实现:存在则啥都不干,不存在,则插入的主要内容,如果未能解决你的问题,请参考以下文章

C++(0x) 中是不是存在无操作“啥都不做”函数对象?

Python 列表添加字典,如果key值存在则啥也不做

动态SQL语句:定义

用sql语句更新一条记录,如果不存在就插入,怎么写?

SQL-如果指定值存在返回1,如果不存在返回0的SQL语句

如何用sql语句查询:在一个表中存在而另一个表中不存在的第一条记录?