SQL搜索过滤id列表

时间:2015-05-07 17:58:03

标签: mysql sql

我很好奇是否有一种狡猾的方法只能通过SQL完成以下操作。我有一个来自一个数据库的id列表,我想要针对另一个数据库/表过滤此列表。要求是:

  1. 在表格中搜索匹配的ID;如果匹配并且该记录满足另一个约束(其中field2为null),则将其从初始列表中删除。
  2. 返回(1)中的结果以及初始列表中第二个表中未找到的任何ID。
  3. 例如,如果我的列表包含id的[1,2,3,4],我希望过滤的my_table看起来像:

    +-------+--------+
    | my_id | Field2 |
    +-------+--------+
    |     1 | true   |
    |     2 |        |
    |     3 | true   |
    +-------+--------+
    

    然后我预计最终结果为[1,3,4]。过滤掉id = 2的记录,因为Field2为空,并且4仍然存在,因为它根本不在表中。

    到目前为止,我提出的所有内容都在下面,符合要求(1),但不符合要求(2):

    select distinct my_id
    from my_table where my_id IN (1,2,3)  --csv list of id's
    and not exists 
    (select my_id
       from my_table 
       where my_id IN (1,2,3) and field2 is null)
    

    是否有可能通过从我的初始id列表创建临时记录集来以某种方式使用MINUS?

1 个答案:

答案 0 :(得分:1)

SELECT DISTINCT t1.my_id
FROM my_table t1
LEFT JOIN my_table2 t2 
ON t1.my_id = t2.field2
WHERE t1.my_id IN (1,2,3)
  AND t2.field2 IS NULL