Error Snowflake - Unsupported Subquery Type Cannot Be Evaluated

Error Snowflake - Unsupported Subquery Type Cannot Be Evaluated

I am facing an error in snowflake saying "Unsupported subquery type cannot be evaluated" after for example executing the below statement. How should write this statement to avoid this error?

select A
from ( select b , c FROM test_table ) ;

1

3 Answers

The outer query column list needs to be within the column list of the subquery. example: select b from (select b,c from test_table);

0

ignoring "columns" the query you have shown will never trigger this error.

You would get it from this form though:

select A.*
from tableA as A
where a.x = (select b.y FROM test_table as b where b.z = a.z)

this form assuming there is only 1 b.y per b.z can be turned into a inner join like

select A.*
from tableA as A
join test_table as b
    on b.z = a.z and a.x = b.y

other forms of this pattern do the likes of max(b.y) and those can be made into a sub-select like:

select A.*
from tableA as A
join (
    select c.z, max(c.y) from test_table as c group by 1
) as b
    on b.z = a.z and a.x = b.y

but the general pattern is, in other databases there is no "cost" to do row-by-row queries, where-as Snowflake is more optimal with pre-building tables of similar data, and then equi-joining those results together. So both the "how-to-write" example pivot from a for-each-row thinking to a build the set of all possible answers, and then join that. This allows for the most parallel processing of the data possible. And while it means you the develop need to understand your data to get he best performance out of it, in general if you are doing large scale data processing, you should be understanding your data. So this costs, is rather acceptable imho.

4

If you are trying to Match Two Attributes on the Subquery.

Use like below:

  1. If both need to matched:

    select * from Table WHERE a IN ( select b FROM test_table ) AND a IN ( select c FROM test_table )

  2. If any one need to matched:

    select * from Table WHERE a IN ( select b FROM test_table ) OR a IN ( select c FROM test_table )

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Maya Lin-Takahashi
Author

Maya Lin-Takahashi

Maya is a hardware enthusiast who tests and reviews smart home devices, smartphones, wearables, and audio gear. She focuses on practical consumer value and build quality.