SQL с SELECT, как пройти через - PullRequest
0 голосов
/ 12 ноября 2018

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

У меня есть две большие таблицы, и между ними нет общего ключа . Очевидно, что когда я хочу присоединиться к ним, это декартово произведение, такое как m x n строк. Я хочу избежать этого. Я прочитаю одну запись из tableA, а затем сопоставлю ее с tableB всеми строками, но по крайней мере у меня будет контроль над тем, сколько записей я обработал в tableA.

В настоящее время я не знаю, как далеко выполнен запрос.

У меня вопрос, могу ли я сделать это в WITH утверждении:

Я взял простой пример, скажем EMP таблица из SCOTT/TIGER примера, и одна запись за раз соответствовала бы таблице DEPT и вернула бы DNAME. Я написал этот запрос, но не делаю, как ожидалось. А как ссылаться на DNAME из 2-го запроса:

with emp_rec as (select * from emp),
     dept_rec as (select dname 
      from   dept, emp_rec
      where  dept.deptno in (10, 20) and 
             dept.deptno = emp_rec.deptno)
select * 
from emp_rec

Результаты, которые я ожидаю, аналогичны присоединению к таблицам EMP и DEPT в emp / deptno = dept / deptno. Но я хочу сделать это по одной EMP-записи за раз без CURSOR или STORED PROCEDURE в чистом SQL. Надеюсь, я смог объяснить, что у меня на уме.

Что я делаю не так, пожалуйста, помогите. спасибо

Привет

Мне удалось решить мою проблему. Вместо выбора из EMP_REC я изменил на DEPT_REC, это сработало. Вот новый запрос:

with emp_rec as (select * from emp),
     dept_rec as (select emp_rec.*, dname 
      from   dept, emp_rec
      where  dept.deptno in (10, 20) and 
             dept.deptno = emp_rec.deptno)
select * 
from dept_rec

спасибо

Я могу контролировать оба запроса по отдельности. И ограничение в том, что подзапросы не ссылаются на переменные parentQuery, исчезло.

1 Ответ

0 голосов
/ 12 ноября 2018

Оператор WITH предоставляет несколько запросов для взаимодействия друг с другом. Это отличается от подзапросов в предложении FROM, где каждый запрос не зависит от других.

Еще одна особенность CTE, которая стала здесь полезной, заключительный запрос может вызывать любой из подзапросов в предложении WITH. У меня было два подзапроса в предложении WITH EMP_REC и DEPT_REC. Я позвонил DEPT_REC, и это сработало.

Для понимания данных в этом запросе, пожалуйста, используйте базу данных Oracle SCOTT / TIGER, которая имеет стандартные таблицы EMP (14 строк), DEPT и т. Д.

спасибо за терпение bb23850

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