Как использовать выходные данные 1-го запроса в качестве входных данных для 2-го? - PullRequest
1 голос
/ 01 апреля 2020

Я пытался сделать это, чтобы избежать ручной работы. не уверен, если это возможно или нет.

Первый запрос:

SELECT Max(version), Project 
FROM Table_1 
GROUP_BY project

Второй запрос:

SELECT B.project, B.version, B.defect, B.Assign, C.staus 
FROM Table_2 B 
JOIN Table_3 C ON B.project = C.project AND B.version = C.version
WHERE (B.project = 1 AND B.version = 2)

Я хочу, чтобы все последние версии проектов в этой базе данных автоматически взял с первого запроса и вошел во второй запрос.

Спасибо за ваше время.

Ответы [ 3 ]

0 голосов
/ 01 апреля 2020

Использование cte может облегчить чтение:

WITH quarry1 AS
(
  SELECT Max(version) as version, Project FROM Table_1 
  GROUP_BY project
)
SELECT B.project, B.version, B.defect, B.Assign, C.staus 
FROM 
    Table_2 B 
    INNER JOIN Table_3 C ON B.project = C.project AND B.version = C.version
    INNER JOIN quarry1 D ON B.project = D.project AND B.version = D.version
WHERE 
    (B.project = 1 and B.version = 2) -- you should probably remove this

  --if you leave the WHERE clause in there is probably no point running the 
  --query that calculates the MAX. I left it in to demo how to put two
  --queries together - i.e. I answered literally the question you asked
  --rather than guessing at what you meant to ask. Think on and fix this

Вам нужно дать MAX псевдоним - я только что снова использовал version. Вы должны стремиться дать таблицам и псевдонимам хорошие значимые имена, хотя; Таблица 1/2/3 a / b / c / d не очень наглядна и усложнит чтение, запись и отладку запроса

0 голосов
/ 01 апреля 2020

В Oracle вы можете использовать in:

SELECT B.project, B.version, B.defect, B.Assign, C.staus 
FROM Table_2 B JOIN
     Table_3 C
     ON B.project = C.project AND B.version = C.version
WHERE (B.project, B.version) IN (SELECT Max(version), Project 
                                 FROM Table_1 
                                 GROUP BY project
                                );

Или коррелированный подзапрос:

SELECT B.project, B.version, B.defect, B.Assign, C.staus 
FROM Table_2 B JOIN
     Table_3 C
     ON B.project = C.project AND B.version = C.version
WHERE B.version = (SELECT MAX(t1.version) 
                   FROM Table_1 t1
                   WHERE t1.project = B.project
                  );
0 голосов
/ 01 апреля 2020

Присоединяйтесь к ним:

SELECT B.project, B.version, B.defect, B.Assign, C.staus 
FROM Table_2 B JOIN Table_3 C ON B.project = C.project 
                             AND B.version = C.version
join (select max(version) max_version,
             project
      from table_1
      group by project
     ) x on x.project = b.project 
        and x.max_version = b.version;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...