基本上问题是
获取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来避免它?
答案 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中的内容。