Appearance
IN
Define a condition that compares an expression with a list of literal values or the results of a subquery.
expression [ NOT ] IN (list | subquery)
where subquery
returns one column with 0 or more rows.
Note: An IN
list can contain a maximum of 200000 values.
For example:
premdb=# SELECT name, city FROM team
WHERE city in('London','Liverpool','Birmingham') ORDER BY 2,1;
name | city
----------------------+------------
Aston Villa | Birmingham
Birmingham City | Birmingham
West Bromwich Albion | Birmingham
Everton | Liverpool
Liverpool | Liverpool
Arsenal | London
Charlton Athletic | London
Chelsea | London
Crystal Palace | London
Fulham | London
Queens Park Rangers | London
Tottenham Hotspur | London
West Ham United | London
Wimbledon | London
(14 rows)
The following example uses a subquery as the input to the IN condition:
premdb=# SELECT seasonid FROM season
WHERE seasonid IN(SELECT seasonid FROM match);
seasonid
----------
1
2
3
4
5
6
7
8
9
...
Note: In general, row comparisons with multi-value IN
lists are supported. For example:
premdb=# select * from match where(htid, atid) not in(select htid, atid from team) limit 5;
seasonid | matchday | htid | atid | ftscore | htscore
----------+---------------------+------+------+---------+---------
1 | 1992-08-01 00:00:00 | 2 | 52 | 0-1 | -
1 | 1992-08-01 00:00:00 | 2 | 55 | 0-1 | -
1 | 1992-08-01 00:00:00 | 2 | 63 | 2-1 | -
1 | 1992-08-01 00:00:00 | 2 | 64 | 3-0 | -
1 | 1992-08-01 00:00:00 | 2 | 65 | 3-0 | -
(5 rows)
However, Yellowbrick does not support row comparisons for multi-value NOT IN
lists when an expression on either side of the IN
condition evaluates to NULL
.
To work around this problem, either remove null
values from the data or rewrite the query by using an EXISTS
or NOT EXISTS
subquery.
For example, you can rewrite this query:
select * from t1 where
(t1.c1, t1.c2) not in (select * from t2);
as follows:
select * from t1 where
not exists (select 1 from t2 where t1.c1=t2.c1 and t1.c2=t2.c2);
Parent topic:SQL Conditions