如何优雅联结两个独立JOIN的SQL查询结果?
IIT SQL题目求解问题
这是一道印度理工学院(IIT)的题目:
我已经能写出以下两个独立查询:
- (i)
P LEFT JOIN Q ON P.A = Q.A AND P.B = Q.B - (ii)
Q RIGHT JOIN R ON Q.A = R.A
但不知道如何把这两个查询的结果联结起来。尝试了下面的语句,结果出现歧义错误。我知道可以给列起别名,但不清楚怎么在FROM子句里给列名创建别名:
mysql> with r1 as (select * from p left join q on p.a = q.a and p.b = q.b) select * from q right join r on q.a = r.a cross join r1 on r1.a = r.e; ERROR 1060 (42S21): Duplicate column name 'a'
有没有更优雅的方法?比如用两个WITH子句分别存储两个查询结果,再联结它们?或者有没有更简单的实现方式?
编辑补充
为避免列名歧义,我尝试给所有字段起别名,这个方法可行。同时也会尝试其他方案:
mysql> with r1 as (select p.a as pa, p.b as pb, p.c as pc, q.a as qa, q.b as qb, q.d as qd from p left join q on p.a = q.a and p.b = q.b), r2 as (select q.a as qa1, q.b as qb1, q.d as qd1, r.a as ra1, r.e as re1 from q right join r on q.a = r.a) select * from r1 cross join r2; +------+------+------+------+------+------+------+------+------+------+------+ | pa | pb | pc | qa | qb | qd | qa1 | qb1 | qd1 | ra1 | re1 | +------+------+------+------+------+------+------+------+------+------+------+ | a3 | b2 | c2 | NULL | NULL | NULL | a1 | b2 | 2 | a1 | e1 | | a3 | b3 | c1 | NULL | NULL | NULL | a1 | b2 | 2 | a1 | e1 | | a2 | b1 | c2 | a2 | b1 | 5 | a1 | b2 | 2 | a1 | e1 | | a1 | b2 | c1 | a1 | b2 | 2 | a1 | b2 | 2 | a1 | e1 | | a3 | b2 | c2 | NULL | NULL | NULL | a3 | b1 | 6 | a3 | e2 | | a3 | b3 | c1 | NULL | NULL | NULL | a3 | b1 | 6 | a3 | e2 | | a2 | b1 | c2 | a2 | b1 | 5 | a3 | b1 | 6 | a3 | e2 | | a1 | b2 | c1 | a1 | b2 | 2 | a3 | b1 | 6 | a3 | e2 | | a3 | b2 | c2 | NULL | NULL | NULL | NULL | NULL | NULL | a4 | e3 | | a3 | b3 | c1 | NULL | NULL | NULL | NULL | NULL | NULL | a4 | e3 | | a2 | b1 | c2 | a2 | b1 | 5 | NULL | NULL | NULL | a4 | e3 | | a1 | b2 | c1 | a1 | b2 | 2 | NULL | NULL | NULL | a4 | e3 | | a3 | b2 | c2 | NULL | NULL | NULL | NULL | NULL | NULL | a4 | NULL | | a3 | b3 | c1 | NULL | NULL | NULL | NULL | NULL | NULL | a4 | NULL | | a2 | b1 | c2 | a2 | b1 | 5 | NULL | NULL | NULL | a4 | NULL | | a1 | b2 | c1 | a1 | b2 | 2 | NULL | NULL | NULL | a4 | NULL | +------+------+------+------+------+------+------+------+------+------+------+
内容的提问来源于stack exchange,提问作者BaskarA
相关产品推荐
相关产品推荐

