Я пытаюсь добиться чего-то вроде этого:
У меня есть две большие таблицы, и между ними нет общего ключа . Очевидно, что когда я хочу присоединиться к ним, это декартово произведение, такое как 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, исчезло.