如何判断多个字段组成的关键字在另外一张表中是否存在

如何判断多个字段组成的关键字在另外一张表中是否存在

老帅(20141107)

1.首先判断一个关键字在另外一张表中是否存在很容易!

SELECT * FROM a

WHERE a.ID

IN

(

SELECT b.ID

FROM b

)

2.如果判断的关键字有多个字段构成怎么办呢?

你不能在IN中使用多个字段。如下查询:

SELECT * FROM a

WHERE (a.ID1, a.ID2)

IN

(

SELECT b.ID1, b.ID2

FROM b

)

这不会正常工作,违反了SQLSERVER标准。

3.要解决这一问题,可以用EXISTS来代替IN!

SELECT * FROM a

WHERE EXISTS

(

SELECT NULL

FROM b

WHERE a.ID1 = b.ID1

AND a.ID2 = b.ID2

)

4.值得注意的是,这仅适用于IN,而非NOT IN!

NOT IN与NOT EXISTS在处理空值的方式上略有不同。

SELECT *

FROM a

WHERE (a.ID1, a.ID2) NOT IN

(

SELECT b.ID1, b.ID2

FROM b

)

这不会正常工作,违反了SQLSERVER标准。要模仿NOT IN的查询如下:

我们必须使用以下查询:

SELECT *

FROM a

WHERE NOT EXISTS

(

SELECT NULL

FROM b

WHERE a.ID1 = b.ID1

AND a.ID2 = b.ID2

)

AND NOT EXISTS

(

SELECT NULL

FROM b

WHERE b.ID1 IS NULL

OR b.ID2 IS NULL

)

第二个谓词确保b在ID1和ID2中不会有空值,任何这样的值都会让原始查询不会返回结果!

时间: 2024-10-12 11:10:30

如何判断多个字段组成的关键字在另外一张表中是否存在的相关文章

如何查出同一张表中字段值重复的记录

如何查出同一张表中字段值重复的记录 (2013-03-25 11:28:51) 转载▼ 比如现在有一人员表(表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来select p1.* from persons p1,persons p2where p1.idp2.id and p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address 可以实现上述效果. 几个删除重复记录的SQL

关于如何修改一张表中所有行与选定字段的同sql多行语句的添加方法

利用Excel以及word文档进行操作 将表的字段以及数据全部放入Excel表中并保存. 在word表中将写好的sql语句放入文档,利用邮件--选择收件人--使用现有列表--(选择之前做好的Excel表)--插入合并域(添加在sql语句中的条件中)---完成并合并(编辑单个文档选择全部)--完成(不过为了在使用中更加方便,在保存时应当保存为文本文档模式,既是纯文本模式) 原文地址:https://www.cnblogs.com/shuxiaoguang/p/11699432.html

sql 根据指定条件获取一个字段批量获取数据插入另外一张表字段中

/****** Object: StoredProcedure [dbo].[getSplitValue] Script Date: 03/13/2016 13:58:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[getSplitValue] AS --定义获取GUID DECLARE @NEWID NVARCHAR(50) SET @NEWID= REPLACE(NEWID(

mysql查询某个字段在哪一张表中

SELECT TABLE_SCHEMA, TABLE_NAMEFROM COLUMNS WHERE COLUMN_NAME LIKE '%字段名%'

从数据库统计出某张表中某个字段重复次数

最近有一个新需求就是在数据表里面查询出某个字段重复了多少次进而对其进行排名分析,那么问题来了,SQL该怎么写呢 既然要统计次数肯定要用到COUNT,那么最后得到的SQL就是 SELECT TOP 100 field1,field1Count = COUNT(field1) FROM table1 GROUP BY field1 ORDER BY field1Count DESC 这句SQL的意思就是从table1中统计出field1字段冲重复次数并选出排名前100的field1 好记性不如烂笔头

ORACLE,SQLSERVER等数据库如何获取某张表中相同字段最近一条数

SELECT * FROM ( SELECT JBXX.*,row_number() OVER (partition BY WRYMC ORDER BY WRYMC,CJSJ DESC) R FROM T_WRY_JBXX  JBXX ) A WHERE R=1

同张表中同时查询两个字段显示一个字段,对两个字段进行按时间排序

select b.bid_name as bidName,bd.repayment_way as depict,r.exact_repayment_time as time, r.should_repayment_principal as amount, '待收本金' as typeContent from repayment r INNER JOIN bid b ON r.bid_id = b.bid_id INNER JOIN bid_details bd ON b.bid_id = bd.

MySql常见数据类型,SQL执行顺序,条件语句,转储,查看表中字段属性

数据类型: 1 数字: Tinyint:小数据 用于保存一些范围的整数数值范围 有符号: -128-127 无符号: 0-255 int 整数 数据类型用于保存一些范围的整数数值范围 有符号: -2147483648--2147483647 无符号: 0-4294967295 Bigint 大整数 数据类型用于保存一些范围的整数数值范围: 有符号: -9223372036854775808--9223372036854775807 无符号: 0-18446744073709551615 floa

一个表中的某字段中所有的数据,复制到另一个表中

项目要求,织梦被黑了,又不太会修复织梦的漏洞.决定换一个自己开发的后台吧!问题来了,织梦中的文章数据要全部拿出来,导入到新的后台中. 因为,现有后台的数据表跟织梦的表的结构完全不一样,再加上织梦用于保存文章是用了,dede_addonarticle,dede_archives,这两个表.现在是要将两个表中有用的字段的数据 复制到一个新的表中的一个字段内. 第一步,同步他们的主键,dede_addonarticle的主键是aid,dede_archives的主键是id 1,一张写好了结构的,没有数