000001  
000002  # EVIDENCE-OF: R-52275-55503 When the right operand is an empty set, the
000003  # result of IN is false and the result of NOT IN is true, regardless of
000004  # the left operand and even if the left operand is NULL.
000005  #
000006  
000007  # EVIDENCE-OF: R-64309-54027 Note that SQLite allows the parenthesized
000008  # list of scalar values on the right-hand side of an IN or NOT IN
000009  # operator to be an empty list but most other SQL database engines and
000010  # the SQL92 standard require the list to contain at least one element.
000011  #
000012  
000013  
000014  # EVIDENCE-OF: R-50221-42915 The result of an IN or NOT IN operator is
000015  # determined by the following matrix: Left operand is NULL Right operand
000016  # contains NULL Right operand is an empty set Left operand found within
000017  # right operand Result of IN operator Result of NOT IN operator no no no
000018  # no false true does not matter no yes no false true no does not matter
000019  # no yes true false no yes no no NULL NULL yes does not matter no does
000020  # not matter NULL NULL
000021  #
000022  
000023  skipif oracle
000024  statement ok
000025  CREATE TABLE t1( x INTEGER, y TEXT )
000026  
000027  onlyif oracle
000028  statement ok
000029  CREATE TABLE t1( x INTEGER, y VARCHAR(8) )
000030  
000031  statement ok
000032  INSERT INTO t1 VALUES(1,'true')
000033  
000034  statement ok
000035  INSERT INTO t1 VALUES(0,'false')
000036  
000037  statement ok
000038  INSERT INTO t1 VALUES(NULL,'NULL')
000039  
000040  # Row 1: 
000041  
000042  query I nosort
000043  SELECT 1 FROM t1 WHERE 1 IN (2)
000044  ----
000045  
000046  query I nosort
000047  SELECT 1 FROM t1 WHERE 1.0 IN (2.0)
000048  ----
000049  
000050  query I nosort
000051  SELECT 1 FROM t1 WHERE '1' IN ('2')
000052  ----
000053  
000054  query I nosort
000055  SELECT 1 FROM t1 WHERE 1 NOT IN (2)
000056  ----
000057  1
000058  1
000059  1
000060  
000061  query I nosort
000062  SELECT 1 FROM t1 WHERE 1.0 NOT IN (2.0)
000063  ----
000064  1
000065  1
000066  1
000067  
000068  query I nosort
000069  SELECT 1 FROM t1 WHERE '1' NOT IN ('2')
000070  ----
000071  1
000072  1
000073  1
000074  
000075  #
000076  # Row 2: empty RHS
000077  
000078  skipif mysql # empty RHS
000079  skipif mssql # empty RHS
000080  skipif oracle # empty RHS
000081  query I nosort
000082  SELECT 1 FROM t1 WHERE 1 IN ()
000083  ----
000084  
000085  skipif mysql # empty RHS
000086  skipif mssql # empty RHS
000087  skipif oracle # empty RHS
000088  query I nosort
000089  SELECT 1 FROM t1 WHERE 1.0 IN ()
000090  ----
000091  
000092  skipif mysql # empty RHS
000093  skipif mssql # empty RHS
000094  skipif oracle # empty RHS
000095  query I nosort
000096  SELECT 1 FROM t1 WHERE '1' IN ()
000097  ----
000098  
000099  skipif mysql # empty RHS
000100  skipif mssql # empty RHS
000101  skipif oracle # empty RHS
000102  query I nosort
000103  SELECT 1 FROM t1 WHERE NULL IN ()
000104  ----
000105  
000106  skipif mysql # empty RHS
000107  skipif mssql # empty RHS
000108  skipif oracle # empty RHS
000109  query I nosort
000110  SELECT 1 FROM t1 WHERE 1 NOT IN ()
000111  ----
000112  1
000113  1
000114  1
000115  
000116  skipif mysql # empty RHS
000117  skipif mssql # empty RHS
000118  skipif oracle # empty RHS
000119  query I nosort
000120  SELECT 1 FROM t1 WHERE 1.0 NOT IN ()
000121  ----
000122  1
000123  1
000124  1
000125  
000126  skipif mysql # empty RHS
000127  skipif mssql # empty RHS
000128  skipif oracle # empty RHS
000129  query I nosort
000130  SELECT 1 FROM t1 WHERE '1' NOT IN ()
000131  ----
000132  1
000133  1
000134  1
000135  
000136  skipif mysql # empty RHS
000137  skipif mssql # empty RHS
000138  skipif oracle # empty RHS
000139  query I nosort
000140  SELECT 1 FROM t1 WHERE NULL NOT IN ()
000141  ----
000142  1
000143  1
000144  1
000145  
000146  # Row 3:
000147  
000148  query I nosort
000149  SELECT 1 FROM t1 WHERE 1 IN ( NULL, 1 )
000150  ----
000151  1
000152  1
000153  1
000154  
000155  query I nosort
000156  SELECT 1 FROM t1 WHERE 1.0 IN ( NULL, 1.0 )
000157  ----
000158  1
000159  1
000160  1
000161  
000162  query I nosort
000163  SELECT 1 FROM t1 WHERE '1' IN ( NULL, '1' )
000164  ----
000165  1
000166  1
000167  1
000168  
000169  query I nosort
000170  SELECT 1 FROM t1 WHERE 1 NOT IN ( NULL, 1 )
000171  ----
000172  
000173  query I nosort
000174  SELECT 1 FROM t1 WHERE 1.0 NOT IN ( NULL, 1.0 )
000175  ----
000176  
000177  query I nosort
000178  SELECT 1 FROM t1 WHERE '1' NOT IN ( NULL, '1' )
000179  ----
000180  
000181  query I nosort
000182  SELECT 1 FROM t1 WHERE 1 IN ( 1 )
000183  ----
000184  1
000185  1
000186  1
000187  
000188  query I nosort
000189  SELECT 1 FROM t1 WHERE 1.0 IN ( 1.0 )
000190  ----
000191  1
000192  1
000193  1
000194  
000195  query I nosort
000196  SELECT 1 FROM t1 WHERE '1' IN ( '1' )
000197  ----
000198  1
000199  1
000200  1
000201  
000202  query I nosort
000203  SELECT 1 FROM t1 WHERE 1 NOT IN ( 1 )
000204  ----
000205  
000206  query I nosort
000207  SELECT 1 FROM t1 WHERE 1.0 NOT IN ( 1.0 )
000208  ----
000209  
000210  query I nosort
000211  SELECT 1 FROM t1 WHERE '1' NOT IN ( '1' )
000212  ----
000213  
000214  #
000215  # Row 4: RHS contains NULL, LHS not in RHS
000216  
000217  query I nosort
000218  SELECT 1 FROM t1 WHERE 1 IN ( NULL, 2 )
000219  ----
000220  
000221  query I nosort
000222  SELECT 1 FROM t1 WHERE 1.0 IN ( NULL, 2.0 )
000223  ----
000224  
000225  query I nosort
000226  SELECT 1 FROM t1 WHERE '1' IN ( NULL, '2' )
000227  ----
000228  
000229  query I nosort
000230  SELECT 1 FROM t1 WHERE 1 NOT IN ( NULL, 2 )
000231  ----
000232  
000233  query I nosort
000234  SELECT 1 FROM t1 WHERE 1.0 NOT IN ( NULL, 2.0 )
000235  ----
000236  
000237  query I nosort
000238  SELECT 1 FROM t1 WHERE '1' NOT IN ( NULL, '2' )
000239  ----
000240  
000241  #
000242  # Row 5: LHS is NULL
000243  
000244  query I nosort
000245  SELECT 1 FROM t1 WHERE NULL IN ( 1 )
000246  ----
000247  
000248  query I nosort
000249  SELECT 1 FROM t1 WHERE NULL IN ( 1.0 )
000250  ----
000251  
000252  query I nosort
000253  SELECT 1 FROM t1 WHERE NULL IN ( '1' )
000254  ----
000255  
000256  query I nosort
000257  SELECT 1 FROM t1 WHERE NULL NOT IN ( 1 )
000258  ----
000259  
000260  query I nosort
000261  SELECT 1 FROM t1 WHERE NULL NOT IN ( 1.0 )
000262  ----
000263  
000264  query I nosort
000265  SELECT 1 FROM t1 WHERE NULL NOT IN ( '1' )
000266  ----
000267  
000268  query I nosort
000269  SELECT 1 FROM t1 WHERE NULL IN ( NULL, 1 )
000270  ----
000271  
000272  query I nosort
000273  SELECT 1 FROM t1 WHERE NULL IN ( NULL, 1.0 )
000274  ----
000275  
000276  query I nosort
000277  SELECT 1 FROM t1 WHERE NULL IN ( NULL, '1' )
000278  ----
000279  
000280  query I nosort
000281  SELECT 1 FROM t1 WHERE NULL NOT IN ( NULL, 1 )
000282  ----
000283  
000284  query I nosort
000285  SELECT 1 FROM t1 WHERE NULL NOT IN ( NULL, 1.0 )
000286  ----
000287  
000288  query I nosort
000289  SELECT 1 FROM t1 WHERE NULL NOT IN ( NULL, '1' )
000290  ----
000291  
000292  # EVIDENCE-OF: R-35033-20570 The subquery on the right of an IN or NOT
000293  # IN operator must be a scalar subquery if the left expression is not a
000294  # row value expression.
000295  
000296  query I nosort
000297  SELECT 1 FROM t1 WHERE 1 IN (SELECT 1)
000298  ----
000299  1
000300  1
000301  1
000302  
000303  statement error
000304  SELECT 1 FROM t1 WHERE 1 IN (SELECT 1,2)
000305  
000306  statement error
000307  SELECT 1 FROM t1 WHERE 1 IN (SELECT x,y FROM t1)
000308  
000309  statement error
000310  SELECT 1 FROM t1 WHERE 1 IN (SELECT * FROM t1)
000311  
000312  statement error
000313  SELECT 1 FROM t1 WHERE 1 IN (SELECT min(x),max(x) FROM t1)