PostgreSQL: Advanced SQL: Sub-queries - unknown features?

  • Columns from outer queries are accessible in sub-queries
01 CREATE TABLE subscribers (
02      usrid int,
03      address text,
04      primary key(usrid));
05
06 CREATE TABLE expiredsubs (
07      usrid int);
08
09 SELECT usrid,address FROM subscribers
10      EXCEPT SELECT e.usrid,s.address FROM expiredsubs e, subscribers s
11      WHERE e.usrid=s.usrid;
12
13 SELECT usrid, address from subscribers WHERE
14      usrid NOT IN(SELECT usrid FROM expiredsubs);
15
16 SELECT s.usrid, s.address FROM subscribers s WHERE
17      NOT EXISTS(SELECT 1 FROM expiredsubs e WHERE e.id=s.usrid);
  • Also available in DELETE & UPDATE
01 DELETE FROM expiredsubs
02      WHERE NOT EXISTS(select 1 FROM subscribers s WHERE
03      s.usrid=expiredsubs.usrid);

  • Row-wise comparison
  • Simplification of complex (many-to-one) sub-queries
01 CREATE TABLE oldpurchases (
02      prodid int,
03      name text,
04      address text,
05      email text);
06
07 SELECT count(distinct name) FROM oldpurchases WHERE
08      (address,email) IN(SELECT e.address, e.email FROM esubscribers e);
Prev

Next

Page 33