-1

属性 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
4

2 回答 2

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
于 2013-10-29T03:38:49.783 回答
0

使用基本列而不是别名来描述您的连接。此外,将“连接表”放在首位并将其等同于“最基础的表”更易读。

正如我更正的那样,您想将 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

正如我所说,您的问题提出了一个错误的查询,其中至少有两个问题和冗余。有点不可能说出正确的查询是什么,因为你还没有说出你的意图。

请提供完整和适当的详细信息,下次请确保将其包含在您的问题中。

于 2013-10-29T04:02:24.277 回答