|
0
Lama12
03.03.16
✎
13:14
|
Есть запрос (хотя таблицы в нем важнее)
ВЫБРАТЬ
Проверяемые.А,
Возможные.Ф
ИЗ
(ВЫБРАТЬ
"а" КАК А,
1 КАК Б
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"а",
3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"а",
3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"в",
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"в",
3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"г",
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"г",
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"г",
3) КАК Проверяемые,
(ВЫБРАТЬ
1 КАК Ф
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3) КАК Возможные
Нужно что б в результате получилась таблица:
а 2
в 1
Фактически в таблице "Проверяемые" должны быть записи типа
А Б
а 1
а 2
а 3
В таблице "Возможные" всё множество значений которые могут быть в поле "Б" таблицы "Проверяемые".
Нужно выбрать значения поля "А" из таблицы "Проверяемые", для которых отсутствует хотя бы одно сочетание из всех возможных с таблицей "Возможные". В результат вывести комбинации значений поля "А" таблицы "Проверяемые", со значениями из таблицы "Возможные", которых нет в таблице "Проверяемые".
Написал как смог. Пример ИМХО нагляднее :)
Как связать таблицы? Туплю второй день... Скорее всего решение простое...поэтому и туплю...
|
|
|
1
LordCMEPTb
03.03.16
✎
13:31
|
На самом решение простое: идея в том, чтобы сначала создать таблицу со всеми возможными комбинациями А и Ф, а затем сравнить её с проверяемой.
ВЫБРАТЬ
1 КАК Ф
ПОМЕСТИТЬ ВТ_Возможные
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
"а" КАК А,
1 КАК Б
ПОМЕСТИТЬ ВТ_Проверяемые
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"а",
3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"а",
3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"в",
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"в",
3
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"г",
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"г",
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"г",
3
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Разные_А_Проверяемые.А,
ВТ_Возможные.Ф
ПОМЕСТИТЬ ВТ_ВсеВозможные
ИЗ
ВТ_Возможные КАК ВТ_Возможные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
ВТ_Проверяемые.А КАК А
ИЗ
ВТ_Проверяемые КАК ВТ_Проверяемые) КАК Разные_А_Проверяемые
ПО (ИСТИНА)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ВсеВозможные.А,
ВТ_ВсеВозможные.Ф
ИЗ
ВТ_ВсеВозможные КАК ВТ_ВсеВозможные
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Проверяемые КАК ВТ_Проверяемые
ПО ВТ_ВсеВозможные.А = ВТ_Проверяемые.А
И ВТ_ВсеВозможные.Ф = ВТ_Проверяемые.Б
ГДЕ
ВТ_Проверяемые.А ЕСТЬ NULL
|
|