我有两张桌子。表1和表2
表1
id tid
1 100
2 200
3 300
表2
tid name
100 A
200 B
我想从表1中取出记录的id,而不是表2中的tid。
我的输出应该是这样的。
Table1.id
3
为此,我写了以下查询但是花了太多时间。以来 两个表都有更多的记录。
请帮助我如何编写查询,以便花费更少的时间。
select id from Table1 where tid not in (select tid from Table2)
select a.id from Table1 a inner join Table2 b on a.tid<>b.tid
TIA。
答案 0 :(得分:8)
使用左连接,然后使用WHERE子句仅过滤连接不起作用的行:
SELECT
a.ID
from
Table1 a
left join
Table2 b
on
a.tid = b.tid
where
b.tid is null
当然,这仍然可能不够快,在这种情况下你需要检查这两个表中的tid列是否有索引。
答案 1 :(得分:3)
怎么样
select id
from table1
where tid IN (
select tid from table1
minus
select tid from table2
)
在Oracle中设置操作(减去上面部分)非常快
答案 2 :(得分:1)
首先创建索引:
CREATE INDEX t1_tid ON table1 (tid ASC);
CREATE INDEX t2_tid ON table2 (tid ASC);
这样可能会更快。
关于查询,如何:
SELECT tid FROM table1
MINUS
SELECT tid FROM table2
答案 3 :(得分:0)
您也可以尝试“不存在”:
从Table1 T1中选择*不存在 (从表2 T2中选择1,其中T1.tid = t2.tid);