2016-12-07 7 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

Исправьте вас r вопрос и добавить образцы данных из ваших таблиц и ожидаемого результата. Я не совсем уверен, что вы пытаетесь сделать здесь ... – WillardSolutions

+0

ну, для начала вам не хватает верхнего 'SELECT'. Кроме того, старайтесь всегда использовать явные объединения вместо старых неявных – Lamak

+0

@krokodilko, что совершенно неверно. Нет проблемы с использованием 'AS f', чтобы дать псевдоним таблице – Lamak

ответ

0

в подзапросы вы присоединитесь следует рассматривать в качестве обычной таблицы или представления, так что представьте, что они есть, и ваш оператор выбора выглядит следующим образом:

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) 

В качестве альтернативы, вы можете избавиться от двух подзапросов, использовать нормальный присоединяется к все ваши таблицы, и в конечном итоге с запросом, как это:

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; 

 Смежные вопросы

  • Нет связанных вопросов^_^