Use the empty string as a name

The empty string can be used as a column or table name — or both.

with""as(select 0""union select""+1 from""limit 5)select""from""

Specifying a value and column name with one string

If we write a string in double quotes it will be used as both column name and value.

select x from(select"x")

Terminating recursive CTEs (loops)

A recursive CTE will terminate when we generate a row that already exists or when the limit is reached. All of these statements will generate the values 0, 1, 2, 3, 4.

with""as(select 0 x union select-~x from""limit 5)select*from"";
with""as(select 0 x union select x+(x<4)from"")select*from"";
with""as(select 0 x union select x%4+1 from"")select*from"";
with""as(select 0 x union select-~x%5 from"")select*from"";

Division by zero to omit rows

Rows that evaluate to NULL are removed from the output. So these two statements will give the same result.

with""as(select 0 x union select x+1 from""limit 10)select*from""where x%3=0;
with""as(select 0 x union select x+1 from""limit 10)select x/(x%3=0)from"";

Question marks

Instead of writing NULL we may write ?. This is often useful when we don't care about the initial value of a column.

with""as(select?x,'golf'y union select unicode(y),substr(y,2)from"")select x from""