Github user gatorsmile commented on a diff in the pull request:

    https://github.com/apache/spark/pull/16710#discussion_r98345474
  
    --- Diff: 
sql/core/src/test/resources/sql-tests/inputs/subquery/exists-subquery/exists-basic.sql
 ---
    @@ -0,0 +1,115 @@
    +-- Tests EXISTS subquery support. Tests basic form 
    +-- of EXISTS subquery (both EXISTS and NOT EXISTS)
    +
    +CREATE TEMPORARY VIEW EMP AS SELECT * FROM VALUES
    +  (100, "emp 1", date "2005-01-01", 100.00D, 10),
    +  (100, "emp 1", date "2005-01-01", 100.00D, 10),
    +  (200, "emp 2", date "2003-01-01", 200.00D, 10),
    +  (300, "emp 3", date "2002-01-01", 300.00D, 20),
    +  (400, "emp 4", date "2005-01-01", 400.00D, 30),
    +  (500, "emp 5", date "2001-01-01", 400.00D, NULL),
    +  (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100),
    +  (700, "emp 7", date "2010-01-01", 400.00D, 100),
    +  (800, "emp 8", date "2016-01-01", 150.00D, 70)
    +AS EMP(id, emp_name, hiredate, salary, dept_id);
    +
    +CREATE TEMPORARY VIEW DEPT AS SELECT * FROM VALUES
    +  (10, "dept 1", "CA"),
    +  (20, "dept 2", "NY"),
    +  (30, "dept 3", "TX"),
    +  (40, "dept 4 - unassigned", "OR"),
    +  (50, "dept 5 - unassigned", "NJ"),
    +  (70, "dept 7", "FL")
    +AS DEPT(dept_id, dept_name, state);
    +
    +CREATE TEMPORARY VIEW BONUS AS SELECT * FROM VALUES
    +  ("emp 1", 10.00D),
    +  ("emp 1", 20.00D),
    +  ("emp 2", 300.00D),
    +  ("emp 2", 100.00D),
    +  ("emp 3", 300.00D),
    +  ("emp 4", 100.00D),
    +  ("emp 5", 1000.00D),
    +  ("emp 6 - no dept", 500.00D)
    +AS BONUS(emp_name, bonus_amt);
    +
    +-- uncorrelated exist query 
    +-- TC.01.01
    +SELECT * 
    +FROM   emp 
    +WHERE  EXISTS (SELECT 1 
    +               FROM   dept 
    +               WHERE  dept.dept_id > 10 
    +                      AND dept.dept_id < 30); 
    +
    +-- simple correlated predicate in exist subquery
    +-- TC.01.02
    +SELECT * 
    +FROM   emp 
    +WHERE  EXISTS (SELECT dept.dept_name 
    +               FROM   dept 
    +               WHERE  emp.dept_id = dept.dept_id); 
    +
    +-- correlated outer isnull predicate
    +-- TC.01.03
    +SELECT * 
    +FROM   emp 
    +WHERE  EXISTS (SELECT dept.dept_name 
    +               FROM   dept 
    +               WHERE  emp.dept_id = dept.dept_id 
    +                       OR emp.dept_id IS NULL);
    +
    +-- Simple correlation with a local predicate in outer query
    +-- TC.01.04
    +SELECT * 
    +FROM   emp 
    +WHERE  EXISTS (SELECT dept.dept_name 
    +               FROM   dept 
    +               WHERE  emp.dept_id = dept.dept_id) 
    +       AND emp.id > 200; 
    +
    +-- Outer references (emp.id) should not be pruned from outer plan
    +-- TC.01.05
    +SELECT emp.emp_name 
    +FROM   emp 
    +WHERE  EXISTS (SELECT dept.state 
    +               FROM   dept 
    +               WHERE  emp.dept_id = dept.dept_id) 
    +       AND emp.id > 200;
    +
    +-- not exists with correlated predicate
    +-- TC.01.06
    +SELECT * 
    +FROM   dept 
    +WHERE  NOT EXISTS (SELECT emp_name 
    +                   FROM   emp 
    +                   WHERE  emp.dept_id = dept.dept_id);
    +
    +-- not exists with correlated predicate + local predicate
    +-- TC.01.07
    +SELECT * 
    +FROM   dept 
    +WHERE  NOT EXISTS (SELECT emp_name 
    +                   FROM   emp 
    +                   WHERE  emp.dept_id = dept.dept_id 
    +                           OR state = 'NJ');
    +
    +-- not exist both equal and greaterthan predicate
    +-- TC.01.08
    +SELECT * 
    +FROM   bonus 
    +WHERE  NOT EXISTS (SELECT * 
    +                   FROM   emp 
    +                   WHERE  emp.emp_name = emp_name 
    +                          AND bonus_amt > emp.salary); 
    --- End diff --
    
    Could you also add one more test case, which is very like `TC.01.08`? This 
test case is used very often in the real world. BTW, you do not need to run 
DB2. We can know the results using our naked eyes. : ) 
    ```SQL
    -- select values present in one table but missing in another one
    
    SELECT emp.*
    FROM   emp
    WHERE  NOT EXISTS (SELECT NULL
                       FROM   bonus
                       WHERE  bonus.emp_name = emp.emp_name);
    ```


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to