Как устранить повторение таблицы - PullRequest
1 голос
/ 29 апреля 2011

У меня есть такой код

select a1.col1,
       a1.col2
from a1
inner join b2 b21
on (a1.col1 = b21.col1 and b21.col5 = 'some constant')
inner join b2 b22
on (a1.col2 = b22.col2 and b22.col5 = 'some other constant')

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

Ответы [ 3 ]

2 голосов
/ 29 апреля 2011

Можете ли вы объяснить связь между таблицами?Как правило, этот запрос нельзя переписать, чтобы он использовал таблицу B2 только один раз.Но во многих случаях это можно переписать, если мы можем сделать некоторые предположения относительно данных.

Если каждая строка в A1 отображается на одну строку в B2 для каждой константы, вы можете сделать что-то вроде

select a1.col1,
       a1.col2
from a1
inner join b2 b21
on (    a1.col1 = b21.col1 
    and b21.col5 IN( 'some constant', 'some other constant'))

Но если A1 отображается на 2 строки в B2 с COL5 «некоторой константой» и 3 рядами в B2 с COL5 «некоторой другой константой»исходный запрос будет возвращать 6 одинаковых строк, где этот запрос будет возвращать только 5 одинаковых строк.

0 голосов
/ 30 апреля 2011

Другой вариант:

select a1.col1,
       a1.col2
from a1, b2
where
    a1.col1 = b2.col1 
and a1.col2 = b2.col2 
and b2.col5 in ('some constant', 'some other constant')
0 голосов
/ 29 апреля 2011

Можете ли вы попробовать с помощью WITH что-то в этих строках (запрос не проверен)

WITH onetab as (SELECT col1, col2 FROM b2 WHERE col5='c1' or col5='c2') 
SELECT a1.col1, a1.col2
FROM a1
inner join onetab on a1.col1 = onetab.col1 and a1.col2 = onetab.col2

Надеюсь, что это даст вам желаемый результат

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