Проблема выбора оператора SQL - PullRequest
0 голосов
/ 09 марта 2011

У меня есть следующее UNION 'заявление:

SELECT  8
UNION ALL
SELECT  7
UNION ALL
SELECT  10

... и нормальное SELECT утверждение:

SELECT column1
  FROM table1

Теперь мой вопрос:объединить два и получить следующий результат

SELECT column1, 10    -- 10 is the biggest element in the UNION statement
  FROM table1

Ответы [ 3 ]

4 голосов
/ 09 марта 2011

Никто не особенно хорош, ради возврата декартового произведения:

SELECT t1.column1,
       (SELECT MAX(x.col)
          FROM (SELECT 8 AS col
                UNION ALL
                SELECT 7 AS col
                UNION ALL
                SELECT 10 AS col) x)
 FROM TABLE1 t1

Подход ANSI-89:

SELECT t1.column1,
       y.max_col
  FROM TABLE1 t1,
       (SELECT MAX(x.col) AS max_col
          FROM (SELECT 8 AS col
                UNION ALL
                SELECT 7 AS col
                UNION ALL
                SELECT 10 AS col) x) y

Подход ANSI-92 с использованием CROSS JOIN (не поддерживается во всех базах данных):

    SELECT t1.column1,
           y.max_col
      FROM TABLE1 t1
CROSS JOIN (SELECT MAX(x.col) AS max_col
              FROM (SELECT 8 AS col
                    UNION ALL
                    SELECT 7 AS col
                    UNION ALL
                    SELECT 10 AS col) x) y
1 голос
/ 09 марта 2011
SELECT column1, (SELECT MAX(TABLE2.X) 
        FROM (SELECT  8 AS X UNION ALL SELECT  7 AS X UNION ALL SELECT  10 AS X) TABLE2 ) 
     AS MY_MAX
FROM TABLE1
1 голос
/ 09 марта 2011

А как же

SELECT column1, (SELECT MAX(v) FROM (SELECT  8 AS v
                                     UNION ALL
                                     SELECT  7 AS v
                                     UNION ALL
                                     SELECT  10 AS v
                                     ) x)
FROM   table1

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...