Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否可以使用同一个表三次&将一个属性别名为与该表相同的次数?_Sql - Fatal编程技术网

Sql 是否可以使用同一个表三次&将一个属性别名为与该表相同的次数?

Sql 是否可以使用同一个表三次&将一个属性别名为与该表相同的次数?,sql,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')

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

不能在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

使用基本列而不是别名来描述联接。此外,将联接表放在第一位并将其与最基本的表等同起来更具可读性

正如我所更正的,您希望以独立于X的关系加入Z&Y。。哪种情况最常见?另一种选择是两阶段的关系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
正如我所说,你的问题提出了一个错误的问题,其中至少有两个问题和冗余。因为你还没有说出你的意图,所以很难判断什么是正确的查询


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

您是否可以在您声明为已工作之前以及声明为未工作之后发布该代码的结果。也许您期望的结果是最后一次连接可能是在z.ID=x.P3上留下连接联系人z?此外,您正在执行左连接,但检查是否为非空。最好执行仅连接非空项的内部连接。即使我像下面一样应用了简单查询,也不起作用。我确实希望在P1、P2上得到结果,当x.res='pre-sale'P2当y.res='pos sale'和P3当z.res='current-sale'问题在重复请求后仍不清楚时,P1的P3结果应出现,投票结束。从联系人x、联系人y中选择x.A1、x.A2、x.A2作为P1、y.A2作为P2、z.A2作为P3,联系ZX,其中x.LN=y.LN和x.res='pre-sale'和y.res='pos sale'和z.res='current-sale'和x.A2不为空,y.A2不为空,z.A2不为空。x.LN DESC的订单仍然不适用于P3。从触点x、触点y中选择x.A1、x.A2、x.A2作为P1、y.x.A2作为P2、x.A2作为P3,联系z,其中x.ObjectID=y.ObjectID和y.ObjectID=ObjectID,x.LN=y.LN和x.res='pre-sale'和y.res=pos-salet'以及z.res='current-sale'和x.P1不为空,y.P2不为空,z.P3不为空,顺序为x.LN描述具有多个属性A1、A2、A3、A4、A5、A6的单表触点,A7我希望别名列A2如下A2为P1,A2为P2,A2为P3预期P1,P2,P3的结果为:P1当x.A4='pre-sale'-必须返回P1 22,44的值,。。当y.A4=‘pos销售’时,P2必须返回P2 31,61的值。。P3当z.A4='current-sale'-必须返回P32,11的值时,…示例联系表A1 A2 A3 A4 A5 A6 A7 1 22 a预售kk 8 4 2 31 b pos销售yy 6 3 3 2 c当前销售hh 2 3 4 44 a预售kk 8 4 5 61 b pos销售yy 6 3 6 11 c当前的销售hh 2 3要真正清楚-Z是直接与X相关,还是Z仅直接与Y相关?真的,我在问一个关于你们关系的基本逻辑结构的问题。软件设计和问题解决是基于意义的,我并不是真的要求无意义的样本数据。看起来是关于预售,现售,还有可能是?联系人表的售后角色。你的正确答案应该是明确的,说Z是一个任意角色,它是从X或Y连接起来的,它们扮演什么角色。