Могу ли я выполнить эту операцию одной командой? - PullRequest
0 голосов
/ 04 декабря 2010

У меня есть две таблицы table1 и table2. Обе таблицы имеют одинаковую структуру. У них есть 4 столбца (x1, y1, z1 и w1 в первой таблице и x2, y2, z2, w2, во второй таблице).

Я хочу извлечь значения из первого столбца второй таблицы (x2). Процедура следующая:

  1. Извлечение всех строк из второй таблицы, для которых y2=y0 и w2=w0.
  2. Для каждой извлеченной строки взять значения первых трех столбцов (x_i, y_i и z_i).
  3. Из первой таблицы извлеките все строки, для которых x1==x_i and y1==y_i and z1==z_i (заранее знаю, что будет извлечена одна или ноль строк).
  4. Для извлеченной строки (если она есть) проверьте значение в столбце w1. Если оно не равно w0, добавьте x_i в список. Если из первой таблицы не извлечены строки, также добавьте в список x_i.
  5. Повторите эту процедуру для всех строк, извлеченных из второй таблицы на шаге 1.

В конце я хочу получить уникальный список значений из x2 (без дубликатов).

У меня вопрос, может ли описанная процедура быть выполнена одной командой.

ДОБАВЛЕНО

w0 и y0 известны и фиксированы (только некоторые фиксированные значения).

1 Ответ

1 голос
/ 04 декабря 2010

Вам понадобится idColumn для table1, который будет иметь только ненулевые значения. Он будет использоваться для проверки того, что левое соединение (которое представляет условие номер 3.) фактически дало какие-либо результаты или нет. Если какой-либо из других столбцов таблицы не допускает нулевые значения, его можно использовать вместо idColumn.

select distinct t2.x2
from table2 as t2
left join table1 as t1 on t1.x1 = t2.x2 and t1.y1 = t2.y2 and t1.z1 = t2.z2
where t2.y2 = y0 and t2.w2 = w0 and ( t1.w1  w0 or t1.idColumn is null )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...