apache / apache/datafusion

Support Nested correlated subquery error with a depth exceeding 1

Open
#15,558 9 comments 0 reactions 1 assignee Claimed by @irenjj View on GitHub
bug
Dominant language
Rust
Stars
9.3k
Forks
2.4k
Avg merge
3d 7h
Merged PRs (30d)
344

Description

### Describe the bug

```
SELECT e1.employee_name, e1.salary
FROM employees e1 <----------------------------┐
WHERE e1.salary > ( |
SELECT AVG(e2.salary) |
FROM employees e2 |
WHERE e2.dept_id = e1.dept_id |
AND e2.salary > ( |
SELECT AVG(e3.salary) |
FROM employees e3 |
WHERE e3.dept_id = e1.dept_id --------┘
)
);
```
Query execution fails for correlated subqueries with a depth exceeding 1, generation error as follows:
```
Schema error: No field named e1.dept_id. Did you mean 'e3.dept_id'?.
```

### To Reproduce

```
CREATE TABLE employees (
employee_id INTEGER,
employee_name VARCHAR,
dept_id INTEGER,
salary DECIMAL
);

CREATE TABLE project_assignments (
project_id INTEGER,
employee_id INTEGER,
priority INTEGER
);

SELECT e1.employee_name, e1.salary
FROM employees e1
WHERE e1.salary > (
SELECT AVG(e2.salary)
FROM employees e2
WHERE e2.dept_id = e1.dept_id
);

SELECT e1.employee_name, e1.salary
FROM employees e1
WHERE e1.salary > (
SELECT AVG(e2.salary)
FROM employees e2
WHERE e2.dept_id = e1.dept_id
AND e2.salary > (
SELECT AVG(e3.salary)
FROM employees e3
WHERE e3.dept_id = e1.dept_id
)
);
```

### Expected behavior

duckdb can run it well:
```
D SELECT e1.employee_name, e1.salary
FROM employees e1
WHERE e1.salary > (
SELECT AVG(e2.salary)
FROM employees e2
WHERE e2.dept_id = e1.dept_id
AND e2.salary > (
SELECT AVG(e3.salary)
FROM employees e3
WHERE e3.dept_id = e1.dept_id
)
);
┌───────────────┬───────────────┐
│ employee_name │ salary │
│ varchar │ decimal(18,3) │
├───────────────┴───────────────┤
│ 0 rows │
└───────────────────────────────┘
```

### Additional context

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.