-1

属性 P1 と P2 の値は機能しますが、3 回目に参加するとすぐに 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 の 2 段階の関係ですが、何をしているのかを言わず列名が無意味であるため、誰もわかりません。

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

私が言ったように、あなたの質問は、少なくとも 2 つの問題と冗長性を含む誤ったクエリを引き起こしました。意図を述べていないため、何が正しいクエリかを判断するのはちょっと不可能です。

完全かつ適切な詳細を提供してください。次回は、これを質問に含めるようにしてください。

于 2013-10-29T04:02:24.277 に答える