exists,not exists总结

来源:百度文库 编辑:神马文学网 时间:2024/06/05 01:54:43
1 exists
SELECT * FROM anken_m WHERE EXISTS(
SELECT  my_list_temp_m.sales_code
FROM     my_list_temp_m
WHERE   my_list_temp_m.sales_code=anken_m.sales_code)
说明:
1) 查询在anken_m表和my_list_temp_m表中都存在的sales_code。
2) sales_code是anken_m的主键,my_list_temp_m的外键。
注意:
1) 外层查询表anken_m是查询的对象。
2) 内层查询表my_list_temp_m是条件对象。
3) 内外层的查询表不能相同。
4) 作为关联条件的anken_m表不需要在内层查询FROM后添加。
5) my_list_temp_m.sales_code=anken_m.sales_code条件的左右顺序不影响查询结果。
2 not exists
SELECT * FROM anken_m WHERE NOT EXISTS(
SELECT  my_list_temp_m.sales_code
FROM     my_list_temp_m
WHERE  my_list_temp_m.sales_code=anken_m.sales_code)
说明:
1) 查询在anken_m表中存在,但是在my_list_temp_m表中不存在的sales_code。
2) sales_code是anken_m的主键,my_list_temp_m的外键。
注意:
1) 外层查询表anken_m是查询的对象。
2) 内层查询表my_list_temp_m是条件对象。
3) 内外层的查询表不能相同。
4) 作为关联条件的anken_m表不需要在内层查询FROM后添加。
5) my_list_temp_m.sales_code=anken_m.sales_code条件的左右顺序不影响查询结果。
3 综合运用
UPDATE anken_m
SET(                   plan_type_code,          branch_name,         business_type_code)
=(SELECT anken.plan_type_code,anken.branch_name,anken.business_type_code
FROM   anken
WHERE  anken.sales_code=anken_m.sales_code)
WHERE EXISTS (
SELECT anken.sales_code
FROM   anken,my_list_temp_m
WHERE  my_list_temp_m.sales_code=anken.sales_code
AND  anken.sales_code=anken_m.sales_code
)
说明:
1) 用一个表的记录数据更新另一个表的记录数据。
2) 用一个SQL语句进行批量更新。
2) sales_code是anken,anken_m的主键,my_list_temp_m的外键。
注意:
1) set 语句中的要被更新字段必须跟数据源字段一一对应,另外数据源查询中的条件必须限定一条记录。 也就是根据sales_code可以唯一确定anken的一条记录,和anken_m的一条记录,这样才能保证要被更新的记录和数据源记录的主键是相同的。
2) 根据WHERE EXISTS语句可以确定数据源记录的范围,也就是可以用anken表中哪些记录更新anken_m表。所以anken_m不需要在WHERE EXISTS语句中的FROM后添加。
实际生产中的例子:
insert tbl_Log select * from tbl_log_Temp
where not exists(
select * from tbl_Log
where tbl_Log.exch_id = tbl_log_Temp.exch_id AND
tbl_Log.iCurID = tbl_log_Temp.iCurID AND
tbl_Log.iFlag = tbl_log_Temp.iFlag AND
tbl_Log.iIdenty = tbl_log_Temp.iIdenty AND
tbl_Log.sOperatorName = tbl_log_Temp.sOperatorName AND
tbl_Log.iConnectStyle = tbl_log_Temp.iConnectStyle AND
tbl_Log.sIpAddress = tbl_log_Temp.sIpAddress AND
tbl_Log.iCommPortNo = tbl_log_Temp.iCommPortNo AND
tbl_Log.iCmdCode = tbl_log_Temp.iCmdCode AND
tbl_Log.sOpCmd = tbl_log_Temp.sOpCmd AND
tbl_Log.sOpTime = tbl_log_Temp.sOpTime AND
tbl_Log.iFinished = tbl_log_Temp.iFinished AND
tbl_Log.iErrorCode = tbl_log_Temp.iErrorCode
)