【发布时间】:2017-11-02 01:58:31
【问题描述】:
我试图弄清楚当您将表与自身交叉连接时,如何从交叉连接中引用某些列。整个交叉连接表也有一个别名,这就是为什么我无法访问列名的原因,因为它也与另一个子查询自然连接。 代码如下:
select q0.sid, q0.sname
from (buys t1 cross join student s3 cross join student s4) q0 natural join
(select s5.sid, s5.sname, s6.sid, s6.sname, t3.sid, t3.bookno
from buys t2 cross join student s5 cross join student s6 cross join buys t3
where t2.sid = s5.sid and t3.bookno = t2.bookno) q1
where t1.sid = s3.sid;
问题在于尝试比较 t1.sid 和 s3.sid 的“where”子句,因为 q0.sid 不明确。如何从交叉连接访问这些列?
【问题讨论】:
-
使用列alias,例如
SELECT s5.sid AS s5_sid, s6.sid AS s6_sid。 -
这不是问题所在。我无法访问第一个交叉连接中的 t1.sid 和 s3.sid 以获取最后的 where 类
-
你需要重构
(buys t1 cross join student s3 cross join student s4)。像(SELECT t1.sid AS t1_sid, s3.sid AS s3_sid, s4.sid AS s4_sid FROM buys t1 CROSS JOIN student s3 CROSS JOIN student s4这样的东西怎么样?
标签: sql postgresql cross-join natural-join