查询显示来自 table A 的所有值和来自 table B 的未匹配值

Query shows the all value from table A and the unmached values from table B

我觉得很简单,就是想不通

我有一个 table 像这样的:

Id|A1  |A2
1 |5   |2
2 |5   |3
3 |6   |9
4 |7   |null

和table B 像这样:

Id|B1
1 |1
2 |2
3 |3
4 |9

我想用这个输出写一个select:

R1 | R2 
5  | 1
5  | 9
6  | 1
6  | 2
6  | 3
7  | 1
7  | 2
7  | 3
7  | 9  

我可以获得给定 A 值的不匹配值:

SELECT * FROM B 
WHERE B.id NOT IN (
    SELECT A2 FROM A WHERE A2 = 5
)

但无法正确构建SQL。

有没有人可以帮助我解决这个问题?

使用cross join生成行,然后过滤掉已经匹配的行:

select a.a1, b.b1
from (select distinct a1 from a) a cross join
     b left join
     a aa
     on aa.a1 = a.a1 and aa.b1 = b.b1
where aa.a1 is null;