SQL查询帮助

时间:2009-04-17 16:07:43

标签: sql tsql

重复:

  

How to do a Select in a Select

我有两张桌子:

TABLE1
Table1Id

TABLE2
Table2Id
Table1Id
UserId

TABLE2中有数千个条目。我想返回一个TABLE1条目列表,其中TABLE2中没有针对特定用户的条目。因此,TABLE2中没有外键条目。像:

这样的查询
select count(*) from TABLE1 where Table1Id not in (
select Table1Id from TABLE2 where id_user = 1)

但是,该查询运行速度非常慢。获得我需要的结果的最有效方法是什么?

4 个答案:

答案 0 :(得分:4)

有类似的question

我认为会更好

SELECT COUNT(*) 
FROM TABLE1 
WHERE NOT EXISTS (SELECT Table1Id FROM TABLE2 WHERE TABLE2.Table1Id = TABLE1.Table1Id AND UserID = 1)

我也会检查索引,如ck建议

答案 1 :(得分:1)

怎么样?
select Table1Id from TABLE1 
minus
select Table1Id from TABLE2 where id_user = 1

我不确定,它的MsSql支持减去。如果没有,您应该尝试相关的子查询。

答案 2 :(得分:1)

只要选择返回相同的字段类型/顺序,您也可以使用'EXCEPT / MINUS'相交来获得两个表之间的差异。

SELECT TABLE1ID
FROM TABLE1
EXCEPT -- or MINUS in Oracle
SELECT TABLE1ID
FROM TABLE2
WHERE USER_ID = 1

答案 3 :(得分:-1)

请参阅How to do a Select in a Select

另外,请确保您查询的任何字段都有合适的索引。

相关问题