3

Sometimes Cross join not return any rows if one of tables doesn't has any row

for example

WITH q1 AS ( SELECT 1 AS V1 WHERE 0 <> 0 ), q2 AS ( SELECT 2 AS V2 ) SELECT * FROM q1 , q2 

I expect this query will return one row V1 = null and V2 = 2 but it returns no rows

Is there any explanation?

1 Answer 1

6

Cross join (cartesian product) returns every combination of rows from the two tables. i.e. each row on one table is paired with every row on the other side.

This gives M * N rows where M is the number of rows from one side and N the number of rows on the other.

Multiplying by zero returns zero.

If you want to preserve rows with no match on the other side you need an outer join.

WITH q1 AS ( SELECT 1 AS V1 WHERE 0 <> 0 ), q2 AS ( SELECT 2 AS V2 ) SELECT * FROM q1 RIGHT OUTER JOIN q2 ON 1=1 

(Or FULL OUTER JOIN to preserve from either side)

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.