317 lines
3.3 KiB
SQL
317 lines
3.3 KiB
SQL
# title: Remove left join on distinct derived table
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
) AS y
|
|
ON x.b = y.b;
|
|
SELECT
|
|
x.a
|
|
FROM x;
|
|
|
|
# title: Remove left join on grouped derived table
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT
|
|
y.b,
|
|
SUM(y.c)
|
|
FROM y
|
|
GROUP BY y.b
|
|
) AS y
|
|
ON x.b = y.b;
|
|
SELECT
|
|
x.a
|
|
FROM x;
|
|
|
|
# title: Remove left join on aggregate derived table
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT
|
|
SUM(y.b) AS b
|
|
FROM y
|
|
) AS y
|
|
ON x.b = y.b;
|
|
SELECT
|
|
x.a
|
|
FROM x;
|
|
|
|
# title: Noop - not all distinct columns in condition
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT DISTINCT
|
|
y.b,
|
|
y.c
|
|
FROM y
|
|
) AS y
|
|
ON x.b = y.b;
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT DISTINCT
|
|
y.b,
|
|
y.c
|
|
FROM y
|
|
) AS y
|
|
ON x.b = y.b;
|
|
|
|
# title: Noop - not all grouped columns in condition
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT
|
|
y.b,
|
|
y.c
|
|
FROM y
|
|
GROUP BY
|
|
y.b,
|
|
y.c
|
|
) AS y
|
|
ON x.b = y.b;
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT
|
|
y.b,
|
|
y.c
|
|
FROM y
|
|
GROUP BY
|
|
y.b,
|
|
y.c
|
|
) AS y
|
|
ON x.b = y.b;
|
|
|
|
# title: Noop - not left join
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
JOIN (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
) AS y
|
|
ON x.b = y.b;
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
JOIN (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
) AS y
|
|
ON x.b = y.b;
|
|
|
|
# title: Noop - unqualified columns
|
|
SELECT
|
|
a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
) AS y
|
|
ON x.b = y.b;
|
|
SELECT
|
|
a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
) AS y
|
|
ON x.b = y.b;
|
|
|
|
# title: Noop - cross join
|
|
SELECT
|
|
a
|
|
FROM x
|
|
CROSS JOIN (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
) AS y;
|
|
SELECT
|
|
a
|
|
FROM x
|
|
CROSS JOIN (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
) AS y;
|
|
|
|
# title: Noop - column is used
|
|
SELECT
|
|
x.a,
|
|
y.b
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
) AS y
|
|
ON x.b = y.b;
|
|
SELECT
|
|
x.a,
|
|
y.b
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
) AS y
|
|
ON x.b = y.b;
|
|
|
|
# title: Multiple group by columns
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT
|
|
y.b AS b,
|
|
y.c + 1 AS d,
|
|
COUNT(1)
|
|
FROM y
|
|
GROUP BY y.b, y.c + 1
|
|
) AS y
|
|
ON x.b = y.b
|
|
AND 1 = y.d;
|
|
SELECT
|
|
x.a
|
|
FROM x;
|
|
|
|
# title: Chained left joins
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT
|
|
y.b AS b
|
|
FROM y
|
|
GROUP BY y.b
|
|
) AS y
|
|
ON x.b = y.b
|
|
LEFT JOIN (
|
|
SELECT
|
|
y.b AS c
|
|
FROM y
|
|
GROUP BY y.b
|
|
) AS z
|
|
ON y.b = z.c;
|
|
SELECT
|
|
x.a
|
|
FROM x;
|
|
|
|
# title: CTE
|
|
WITH z AS (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
)
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN z
|
|
ON x.b = z.b;
|
|
WITH z AS (
|
|
SELECT DISTINCT
|
|
y.b
|
|
FROM y
|
|
)
|
|
SELECT
|
|
x.a
|
|
FROM x;
|
|
|
|
# title: Noop - Not all grouped expressions are in outputs
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT
|
|
y.b
|
|
FROM y
|
|
GROUP BY
|
|
y.b,
|
|
y.c
|
|
) AS y
|
|
ON x.b = y.b;
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
LEFT JOIN (
|
|
SELECT
|
|
y.b
|
|
FROM y
|
|
GROUP BY
|
|
y.b,
|
|
y.c
|
|
) AS y
|
|
ON x.b = y.b;
|
|
|
|
# title: Cross join on aggregate derived table
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
CROSS JOIN (
|
|
SELECT
|
|
SUM(y.b) AS b
|
|
FROM y
|
|
) AS y;
|
|
SELECT
|
|
x.a
|
|
FROM x;
|
|
|
|
# title: Cross join on derived table with LIMIT 1
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
CROSS JOIN (
|
|
SELECT
|
|
y.b AS b
|
|
FROM y
|
|
LIMIT 1
|
|
) AS y;
|
|
SELECT
|
|
x.a
|
|
FROM x;
|
|
|
|
# title: Cross join on derived table with no FROM clause
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
CROSS JOIN (
|
|
SELECT
|
|
1 AS b,
|
|
2 AS c
|
|
) AS y;
|
|
SELECT
|
|
x.a
|
|
FROM x;
|
|
|
|
# title: Noop - cross join on non-aggregate subquery
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
CROSS JOIN (
|
|
SELECT
|
|
y.b
|
|
FROM y
|
|
) AS y;
|
|
SELECT
|
|
x.a
|
|
FROM x
|
|
CROSS JOIN (
|
|
SELECT
|
|
y.b
|
|
FROM y
|
|
) AS y;
|