获取TABLE_A中不在TABLE_B中且条件在TABLE_C中的所有记录

时间:2016-06-06 08:30:06

标签: sql

基本上问题是

获取TABLE_A中不在TABLE_B中的所有记录,并且[table]对应于TABLE_C中的字段[type]

表格布局如下所示

TABLE_A
    id
    ref_id

TABLE_B
    id

TABLE_C
    id
    type

这是我的查询

SELECT * FROM TABLE_A t1
LEFT JOIN TABLE_B t2 ON t1.id = t2.id
WHERE t1.ref_id IN ['id1', #paramId]
AND type IN (SELECT id FROM TABLE_C WHERE type = #paramType)

它可能有效(虽然我没有测试)但我不喜欢那个内部select。 有没有办法使用join s来避免它?

1 个答案:

答案 0 :(得分:1)

您可以改为使用INNER JOIN

SELECT t1.* FROM TABLE_A t1
INNER JOIN TABLE_C t3
 ON(t1.type = t3.id and t3.type = #paramType)
LEFT JOIN TABLE_B t2
 ON (t1.id = t2.id)
WHERE  t2.id is null
   AND t1.ref_id IN ('id1', #paramId)

我添加了这个条件:

    WHERE  t2.id is null

过滤掉表3中的内容。