---
source_url: https://docs.dolphindb.cn/zh/progr/sql/exists.html
fetched_at: 2026-05-19T09:03:44Z
category: progr
title: exists
sha1: 97aa42837ae43a1b99f73529257769c06a17f8f5
---

# exists

和 where 子句搭配使用，通过子查询过滤外查询。

## 语法

```dolphindb
where [not] exists(subquery)
```

subquery：select / exec 语句，其过滤条件中可以包含外查询的字段。

## 详情

- 若子查询涉及到外查询的字段，即相关子查询：

  - 先执行一遍外查询并缓存查询结果。
  - 然后循环将外查询的每一行结果作为子查询的条件进行查询：

    - 若子查询有返回结果，则 exists 子句返回 true，外查询的该行结果将作为最终结果输出；
    - 否则 exists 子句返回 false，该行结果不输出。
- 若子查询和外查询无关，即不相关子查询，则 exists 将根据下述规则进行计算：

  - 如果子查询结果集非空，输出所有外查询结果。
  - 如果子查询结果集为空，则外查询结果为空。 not exists 的计算逻辑和 exists 相反。

**注意**：暂不支持在分布式查询中使用。

## 例子

```dolphindb
t1 = table(`a`b`c`a`e`f as sym, 3.1 2.9 3.0 2.8 3.2 2.9 as val)
t2 = table(`a`b`c as sym, 0 1 -1 as flag)
```

查询1：相关子查询

```dolphindb
select * from t1 where exists(select * from t2 where t1.sym in t2.sym)
```

| sym | val |
| --- | --- |
| a | 3.1 |
| b | 2.9 |
| c | 3 |
| a | 2.8 |

```dolphindb
select * from t1 where not exists(select * from t2 where t1.sym in t2.sym)
```

| sym | val |
| --- | --- |
| e | 3.2 |
| f | 2.9 |

查询2：不相关子查询

```dolphindb
select * from t1 where exists(select * from t2 where flag >= 0)
```

| sym | val |
| --- | --- |
| a | 3.1 |
| b | 2.9 |
| c | 3 |
| a | 2.8 |
| e | 3.2 |
| f | 2.9 |

```dolphindb
select * from t1 where not exists(select * from t2 where flag >= 0)
    //返回值为空
```

查询3：子查询无返回结果

```dolphindb
select * from t1 where exists(select * from t2 where sym=`e)
    //返回值为空
select * from t1 where not exists(select * from t2 where sym=`e)
```

| sym | val |
| --- | --- |
| a | 3.1 |
| b | 2.9 |
| c | 3 |
| a | 2.8 |
| e | 3.2 |
| f | 2.9 |
