Как вложить объединения подзапросов в SQL? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь реализовать автоматический генератор запросов, и мой подход для одного вида запросов состоит в том, чтобы иметь вложенные объединения таким образом Выберите * From ((Q1 присоединиться к Q2 на Q1.x = Q2.x) как T1 Присоединиться к Q3 на T1.x = Q3) Как T2) Присоединиться к Q4 на T2.x = Q4.x) Как T3 ... и так далее

Я пытался реализовать это таким образом, но синтаксис кажется неправильным

SELECT
  *
FROM
  (
    (
      SELECT
        *
      FROM
        (
          Select
            *
          From
            Customers
        ) AS q11
        INNER JOIN (
          Select
            *
          From
            Customers
        ) AS q12 ON q11.customerID = q12.customerID
    )
  ) q1
  JOIN (
    Select
      *
    from
      Customers
  ) q2 ON q1.q11.CustomerID = q2.CustomerID

Ответы [ 3 ]

2 голосов
/ 10 мая 2019

Операторы выбора и подзапросы не возвращают столбцы с точками.

Так что q1.q11.CustomerID не имеет смысла.

SQL JOIN рассчитывает перекрестное соединение. Это значение сначала имеет столбец на левый столбец таблицы с именами левых столбцов таблицы; затем это значение имеет столбец на правый столбец таблицы с именами правых столбцов таблицы. Столбцы идентифицируются точечными именами столбцов или ссылками на столбцы, но их имена не имеют точек. A SELECT * возвращает все эти столбцы - поэтому он возвращает повторяющиеся имена, когда входные таблицы имеют общие имена. Но не точки в именах.

2 голосов
/ 09 мая 2019

Немного более компактная версия будет:

;WITH Data AS(Select * From Customers)

SELECT 
    * 
FROM
    Data D1
    INNER JOIN Data D2 ON D2.ID=D1.ID
    INNER JOIN Data D3 ON D3.ID=D2.ID
    INNER JOIN Data D4 ON D4.ID=D3.ID
    INNER JOIN Data D5 ON D5.ID=D4.ID
    INNER JOIN Data D6 ON D6.ID=D5.ID
    INNER JOIN Data D7 ON D7.ID=D6.ID

И еще компактнее:

SELECT * FROM D D1
JOIN D D2 ON D2.ID=D1.ID
JOIN D D3 ON D3.ID=D2.ID
JOIN D D4 ON D4.ID=D3.ID
JOIN D D5 ON D5.ID=D4.ID
JOIN D D6 ON D6.ID=D5.ID
JOIN D D7 ON D7.ID=D6.ID
0 голосов
/ 09 мая 2019

Запрос в предложении from подходит для создания таблиц.

select * from (выберите * из (выберите * из (выберите * из q1, q2, где q1.x = q2.x) t1,q3, где t1.x = q3.x) t2, q4, где t2.x = q4.x) t3, q5, где t3.x = q5.x

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