Запрос подзапроса - PullRequest
       2

Запрос подзапроса

0 голосов
/ 12 августа 2010

Я пытаюсь сделать что-то вроде этого:

SELECT t1.*,
       t2.*
FROM   (SELECT *
        FROM   USER) AS t1,
       (SELECT *
        FROM   t1) AS t2

Это не работает в MySQL. Возможно ли что-то подобное вышеописанному? Другой вариант - взять последний подзапрос и «обернуть» его вокруг основного запроса. Идеи?

Ответы [ 4 ]

2 голосов
/ 12 августа 2010

Использование:

SELECT t1.*,
       t2.*
  FROM (SELECT *
          FROM USER) AS t1,
       (SELECT *
          FROM (SELECT *
                  FROM USER) AS t1) AS t2

Синтаксис WITH позволяет строить поверх CTE:

WITH t1 AS (
  SELECT * FROM USER), -- comma separates them
     t2 AS (
  SELECT * FROM t1)
SELECT t1.*, t2.*
  FROM t1, t2

.., но MySQL не поддерживает предложение WITH.

1 голос
/ 12 августа 2010

Если в 2 таблицах одинаковое количество столбцов, вы можете просто использовать UNION например,

SELECT *
FROM   USER
UNION
SELECT *
FROM   t1

если у них нет одинаковых столбцов, вам понадобится несколько ребер, чтобы присоединиться к таблицам, например, с помощью внешнего ключа. Э.Г.

SELECT *
FROM   USER as t1
JOIN   t1 as t2 (on t1.id = t2.id)
1 голос
/ 12 августа 2010

Почему бы не

SELECT t1.*, t2.* FROM USER as t1, USER as t2

?Вы также должны добавить условие, или это сгенерирует огромное количество строк.

Теперь, если вы хотите спросить, как ссылаться на предыдущий подзапрос, вы должны повторить его и добавить необходимые дополнительные условия:

SELECT t1.*, t2.* FROM (SELECT bar FROM foo WHERE baz=1) as t1, 
(SELECT bluz,bar FROM foo WHERE baz=1 AND quux = 0) as t2 WHERE t2.bar = t1.bar

Другой вариант - создать представление или временную таблицу с подзапросом (t1)

0 голосов
/ 12 августа 2010

Полагаю, ваш фактический запрос намного сложнее.Возможно ли, что вы могли бы создать представление для представления своего подзапроса, тогда вы могли бы использовать гораздо более простое выражение select, как предложил Винко Врсалович.

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