连接查询的别名
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;
( 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;