我有两张桌子
tb1(field1 int) containing 1,2,3,4
tb2(field2 int) containing 4,12,19,30
当我跑步时
select * from tb1 where exists(select * from tb2 );
我从tb1获得了整个值。为什么会这样?我认为它只会带来4个,因为它存在于两个表中。现在我对exists子句感到困惑。我想知道exists子句在这里做了什么?请帮帮我。
答案 0 :(得分:1)
表达式
exists(select * from tb2 )
与外部查询无关。它可以完全独立地进行评估。如果表true
包含任何行,它将评估为tb2
,如果表为空,则评估为false。由于tb2
确实包含至少一行,因此它被评估为true,因此您的where
子句的每行评估为true
。
你需要将它关联起来,以便按你的意愿工作
SELECT *
FROM tb1
WHERE EXISTS(SELECT *
FROM tb2
WHERE tb1.field1 = tb2.field2);