繁体   English   中英

SQL用于返回db中不存在的所有id并传递sql

[英]SQL for return all the id which does not exist in db and passing in sql

我需要一些帮助来编写满足以下要求的SQL语句。

我有employee_id列表,我需要从java层检查它们是否存在于数据库中,我想对此使用一个查询。

查询样例:

SELECT *
FROM employee
WHERE employee_id IN (1001,1002,1002,10000004).

在此查询中,数据库中不存在10000004

我想到的一种方法是使用以下查询:

SELECT Count(employee_id)
FROM employee
WHERE employee_id IN (1001,1002,1002,10000004).

然后在Java层中检查列表大小和查询结果。 但是我不希望这样,因为我需要所有DB中不存在的所有employee_id

declare @employeeids varchar(1000) --to store ids as comma seperated string
declare @tmpEmployee table (employee_id varchar(50)) --temp employee table to store ids from string
declare @pointer int

select  @employeeids = '1001,1002,1002,10000004' --list of ids to check against database

while (charindex(',', @employeeids, 0) > 0)
begin
        set @pointer =   charindex(',', @employeeids, 0)      
        insert into   @tmpEmployee (employee_id)

        --remove white spaces if exists
        select ltrim(rtrim(substring(@employeeids, 0, @pointer)))   
        set @employeeids = stuff(@employeeids, 1, @pointer,   '') 
end

insert into   @tmpEmployee (employee_id)
select ltrim(rtrim(@employeeids))


select   r.employee_id -- required ids which does not exists in database
        ,e.employee_id 
from    @tmpEmployee r 
            left join employee e on r.employee_id=e.employee_id
where   e.employee_id is null

如果您使用的是Oracle,则此链接可能会对您有所帮助。 这与内置SYS.DBMS_DEBUG_VC2COLL函数的用法有关

存在一个非常糟糕的方法是这样的:

    SELECT * FROM (SELECT 5930 id UNION SELECT 8109 id 
UNION SELECT 8110 id UNION SELECT 8115 id UNION SELECT 8112 id 
UNION SELECT 8113 id UNION SELECT -1 id) b
    WHERE b.id NOT IN (SELECT f.id FROM employee f)

我建议您以其他方式这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM