属性P1和P2的值有效但是我第三次加入后不再适用于P3。
SELECT x.A1, x.A2, x.A2 as P1,y.A2 as P2,z.A2 as P3
FROM Contact x
LEFT JOIN Contact y ON y.ID =x.P2
LEFT JOIN Contact z ON y.ID =z.P3
WHERE (x.LN = y.LN) AND
((x.res ='pre-sale') AND (y.res= pos-sale') AND(z.res='current-sale') ) AND
((x.P1 IS NOT NULL) AND (y.P2 IS NOT NULL) AND (z.P3 IS NOT NULL) )
ORDER by x.LN DESC
答案 0 :(得分:0)
您不能在JOIN和WHERE子句上使用列别名。试试这个问题:
SELECT x.A1, x.A2, x.A2 as P1,y.A2 as P2,z.A2 as P3
FROM Contact x
LEFT JOIN Contact y ON y.ID =x.A2
LEFT JOIN Contact z ON y.ID =z.A2
WHERE (x.LN = y.LN) AND
((x.res ='pre-sale') AND (y.res= 'pos-sale') AND(z.res='current-sale') ) AND
((x.A2 IS NOT NULL) AND (y.A2 IS NOT NULL) AND (z.A2 IS NOT NULL) )
ORDER by x.LN DESC
答案 1 :(得分:0)
使用基本列而不是别名来描述联接。将#34;加入表格"更具可读性。首先,将其等同于"最基本的表"。
我纠正你想要加入Z& Y作为"独立的关系"从X ..这是最常见的情况?替代方案是两阶段关系X-> Y和Y-> Z,但因为您不能说出您正在做什么和您的列 - 名字毫无意义,没有人能说出来。
这是一个可能的例子,对于X - > (Z,Y独立)结构。
SELECT x.A1, x.A2, x.A2 as P1, y.A2 as P2, z.A2 as P3
FROM Contact x
JOIN Contact y ON y.ID=x.P2 and y.LN=x.LN
JOIN Contact z ON z.ID=x.P3 and z.LN=x.LN -- joining Z from X, not from Y; also guessing a condition on LN like for X->Y
WHERE ((x.res ='pre-sale') AND (y.res='pos-sale') AND(z.res='current-sale'))
ORDER by x.LN DESC
正如我所说,你的问题提出了一个错误的问题,其中至少存在两个问题和冗余。因为你没有说出你的意图,所以无法确定正确的查询是不可能的。
请提供全套&适当的细节,下次确保在你的问题中包含这个。