是否有可能使用同一张桌子三次&别名一个属性与表的别名相同?

时间:2013-10-29 03:28:50

标签: sql

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

2 个答案:

答案 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

正如我所说,你的问题提出了一个错误的问题,其中至少存在两个问题和冗余。因为你没有说出你的意图,所以无法确定正确的查询是不可能的。

请提供全套&适当的细节,下次确保在你的问题中包含这个。