powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка из подзапроса
11 сообщений из 11, страница 1 из 1
Выборка из подзапроса
    #39997750
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос такого типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
  *
FROM
  mytable t
WHERE
  t.type IN (SELECT ... FROM ...) AND
  ..........


Мне нужно переписать запрос так, чтобы когда подзапрос не возвращает записей (или возвращает только NULL, если это упростит задачу) в основном запросе фильтр по t.type игнорировался.

Работа происходит в процедуре, так что можно разбить исходный запрос на несколько

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Выборка из подзапроса
    #39997755
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переделай на EXISTS() и NOT EXISTS()
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка из подзапроса
    #39997766
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
переделай на EXISTS() и NOT EXISTS()
И чем это поможет? И при чем здесь NOT EXISTS?
...
Рейтинг: 0 / 0
Выборка из подзапроса
    #39997769
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

А вместо AND OR написать религия не позволяет?
...
Рейтинг: 0 / 0
Выборка из подзапроса
    #39997770
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Работа происходит в процедуре, так что можно разбить исходный запрос на несколько

Если взаимоотношения таблиц позволяют - выверни запрос наизнанку, поместив подзапрос в FOR
SELECT. Внутри этого цикла устанавливай переменную-флаг по (отсутствию) которой выполняй
внешний запрос без этого условия.

Иначе - временная таблица, наполняемая подзапросом и проверяемая перед выбором.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка из подзапроса
    #39997774
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tonal
А вместо AND OR написать религия не позволяет?
Вы сейчас о чем?

Dimitry Sibiryakov
выверни запрос наизнанку,
Подзапрос возвращает десяток записей, основной запрос несколько тысяч. План не стремный получится?
Dimitry Sibiryakov
по (отсутствию) которой выполняй внешний запрос без этого условия.
и не хотелось бы дублировать логику. Тем более, что основной запрос сам вложен в FOR
Dimitry Sibiryakov
Иначе - временная таблица
Вот и я к этому пришел. Что-то типа такого

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
INSERT INTO tmp_table (id) SELECT DISTINCT ...;

SELECT
  *
FROM
  mytable m
  JOIN tmp_table t ON (
    m.type = t.id OR
    t.id IS NULL
  )
...
Рейтинг: 0 / 0
Выборка из подзапроса
    #39997781
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> Вот и я к этому пришел. Что-то типа такого

Думаю, можно вместо временной таблицы и СТЕшкой обойтись, попробуй.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка из подзапроса
    #39997878
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Tonal
А вместо AND OR написать религия не позволяет?
Вы сейчас о чем?

Код: sql
1.
2.
WHERE
  (NOT EXISTS(SELECT ... FROM ...) OR t.type IN (SELECT ... FROM ...)) AND ...


Ну а внутренний запрос можно и в CTE-шку вынести.
...
Рейтинг: 0 / 0
Выборка из подзапроса
    #39997925
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Вроде как конструкция "where in select" не всегда оптимальна. Лучше попробовать CTE или "select from select".
...
Рейтинг: 0 / 0
Выборка из подзапроса
    #40000098
Dimbuch®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
  *
FROM
  mytable t
WHERE
  NOT EXISTS(SELECT ... FROM ...) — Или нет записей во вложенном условии
   OR t.type IN (SELECT ... FROM ...) — Или выбираем по условию
...
Рейтинг: 0 / 0
Выборка из подзапроса
    #40000210
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimbuch®, я ему такое уже предлагал.
не внемлет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка из подзапроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]