SQL Server: возможно ли объединить две таблицы в операторе SELECT без использования временной таблицы? - PullRequest
2 голосов
/ 03 сентября 2011

Я создаю хранимую процедуру, которая устанавливает 3 переменные на основе запросов, и я должен вернуть значение MAX из них.Я пытаюсь сделать это без использования временной таблицы, однако следующее дает мне ошибку Incorrect styntax near ')'

SELECT MAX(PermissionID)
FROM (SELECT @ContactPermission As PermissionID UNION ALL
      SELECT @GroupPermission As PermissionID)

Я также попытался

SELECT MAX((SELECT @ContactPermission UNION ALL SELECT @GroupPermission))

, и я получаю ошибку Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

Я также пытался обойти переменные и использовать UNION в подзапросе ...

SELECT MAX(PermissionID)
FROM (SELECT PermissionID
        FROM PermissionContact
        WHERE ContactID = @ContactID
      UNION ALL
      SELECT PermissionID
      FROM PermissionGroup
      WHERE GroupID = @GroupID)

Это также дает Incorrect syntax near ')'

Любые мыслиили предложения?Являются ли временные таблицы моим единственным вариантом?

Ответы [ 2 ]

3 голосов
/ 03 сентября 2011

Вам необходимо присвоить производной таблице псевдоним.

SELECT MAX(PermissionID)
FROM (SELECT @ContactPermission As PermissionID UNION ALL
      SELECT @GroupPermission As PermissionID) as T
1 голос
/ 06 сентября 2011

Или просто используйте регистр

Select Case When @ContactPermission > @GroupPermission 
       Then @ContactPermission Else @GroupPermission End PermissionID

или

SELECT Case When c.PermissionID > g.PermissionId
        Then c.PermissionID Else g.PermissionId End
FROM PermissionContact c Cross Join PermissionGroup g   
Where c.ContactID = @ContactID
    And g.GroupID = @GroupID
...