连接查询的别名

Alias to a join query

( 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)

谁能告诉我上面使用的语法有什么问题?我在多个查询中遇到了同样的问题,我不确定我是否完全理解我在使用连接时应该如何分配别名(在尝试将别名分配给多个嵌套连接时遇到相同的问题)

您加入的子select应该被视为普通的table或视图,所以想象它们是,您的select语句如下所示:

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

此语句缺少重要部分,如 SELECT 和 FROM 子句。

所以修正一下,如果你想连接两个select,你应该将它们封装在另一个select中,所以你得到:

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

或者,您可以去掉两个子 select,对所有 table 使用普通联接,并以这样的查询结束:

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

这是你需要做的:

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;