将存在子句比较记录?

时间:2016-06-12 10:55:40

标签: mysql sql

我有两张桌子

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子句在这里做了什么?请帮帮我。

1 个答案:

答案 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);