Thread: warning for subquery that references a table but not its columns

warning for subquery that references a table but not its columns

From
Seamus Abshere
Date:
I almost got bit by this today:

=> select email from subscribed where email not in (select email from tracks);
 email
-------
(0 rows)

=> select email from subscribed where email not in (select tracks.email from tracks);
ERROR:  column tracks.email does not exist
LINE 1: ... email from subscribed where email not in (select tracks.ema...

(the "tracks" table doesn't have an "email" column, so the first query is just meaningless)

Should there be a warning for the first query that you reference "tracks" in a subquery but don't use any columns from
it?

--
Seamus Abshere, SCEA
https://www.faraday.io
https://github.com/seamusabshere
https://linkedin.com/in/seamusabshere


Re: warning for subquery that references a table but not its columns

From
Tom Lane
Date:
Seamus Abshere <seamus@abshere.net> writes:
> Should there be a warning for the first query that you reference "tracks" in a subquery but don't use any columns
fromit? 

Unfortunately, outer references in subqueries are perfectly legal per SQL
standard, and also often essential.

If we were to invent a "SET training_wheels = on" option, it would surely
include some warnings in this area, although I'm not sure exactly what the
triggering conditions ought to be.  But there are lots of ways to mess
yourself up in SQL; I don't think subqueries are that much worse than
some other gotchas.

            regards, tom lane