2016-12-07 4 views
0
(SELECT Vraboteni.v, Ulogi.p, Zarabotuva.honorar 
    FROM Vraboteni, Ulogi, Zarabotuva 
    WHERE Vraboteni.v = Ulogi.v 
    AND ima_uloga='sporedna' 
    AND Ulogi.p = Zarabotuva.p 
) as F 
JOIN 
( SELECT Vraboteni.v, Ulogi.p, Zarabotuva.honorar 
    FROM Vraboteni, Ulogi, Zarabotuva 
    WHERE Vraboteni.v = Ulogi.v 
    AND ima_uloga='glavna' 
    AND Ulogi.p = Zarabotuva.p 
) as S 
ON (F.honorar > S.honorar) 

上記の構文で何が問題になるのですか?私は、複数のクエリの上に同じ問題を抱えていると私は私はかなり結合クエリのエイリアス

+1

あなたを編集してくださいあなたのテーブルからのサンプルデータと期待される出力を追加してください。私はあなたがここで何をしようとしているのかよく分かりません... – WillardSolutions

+0

まずは、まず最初に「SELECT」が欠けています。また、暗黙的な暗黙的な継承ではなく、明示的な結合を常に使用してください。 – Lamak

+0

@krokodilkoこれは完全に間違っています。 'AS f'を使ってテーブルにエイリアスを付けることには問題ありません – Lamak

答えて

0
(ネストされた複数の結合にalliasesを割り当てるしようとしたときに同じ問題を抱えて)私が参加し使用した場合、私は、エイリアスを割り当てることになっていますどのように理解していませんあなたが参加

副選択は、通常のテーブルやビューとして考えるので、彼らは想像し、そしてあなたのselect文は次のようになりますする必要があります。

SELECT1 as F 
JOIN SELECT2 as S ON (F.honorar > S.honorar) 

このステートメントはSELECTとFROM句のように、重要な部分が欠落しています。 、

SELECT 
    S.*, 
    F.* 
FROM 
    (SELECT ...) AS F 
    JOIN (SELECT ...) AS S ON (F.honorar > S.honorar) 

はまた、次の2つの副選択を取り除くことができ、通常はために結合を使用:

だから、2つの選択に参加したい場合は、あなたが得るので、あなたは、別の選択でそれらをカプセル化する必要があり、それを修正すべてのテーブル、およびこのようなクエリで終わる:

SELECT 
    Vraboteni.v, Ulogi.p, Zarabotuva.honorar 
FROM 
    Vraboteni AS v1 
    JOIN Ulogi AS u1 ON v1.v = u1.v 
    JOIN Zarabotuva AS z1 ON u1.p = z1.p 
    CROSS JOIN Vraboteni AS v2 -- Not sure if you would want/need a condition here 
    JOIN Ulogi AS u2 ON v2.v = u2.v 
    JOIN Zarabotuva AS z2 ON u2.p = z2.p 
WHERE 
    v1.ima_uloga = 'sporedna' -- Not sure if this should be v1, u1 or z1 
    AND v2.ima_uloga = 'glavna' 
    AND z1.honorar > z2.honorar 
0

これは、あなたが何をする必要があるかです:

SELECT  * 
FROM 
     (SELECT Vraboteni.v 
       , Ulogi.p 
       , Zarabotuva.honorar 
      FROM Vraboteni 
       , Ulogi 
       , Zarabotuva 
      WHERE Vraboteni.v = Ulogi.v 
       AND ima_uloga = 'sporedna' 
       AND Ulogi.p = Zarabotuva.p) AS F 
     JOIN 
      (SELECT Vraboteni.v 
       , Ulogi.p 
       , Zarabotuva.honorar 
      FROM Vraboteni 
       , Ulogi 
       , Zarabotuva 
      WHERE Vraboteni.v = Ulogi.v 
        AND ima_uloga = 'glavna' 
        AND Ulogi.p = Zarabotuva.p) AS S ON F.honorar > S.honorar;