|
Исключить из результатов запроса данные, которые - результат другого запроса | ☑ | ||
---|---|---|---|---|
0
Fedor
17.01.12
✎
19:26
|
Есть запрос. Его результатом является определенное кол-во строк. Но маленький набор строк из него нужно исключить. Этот маленький набор строк можно получить другим запросом.
Как правильнее реализовать єто задачу? Сделать вложенный запрос? Можно ли в этом случае объединить основную и вложенную таблицы так, чтоб из основного набора данных исключались данные второго запроса? Или лучше сделать Запрос пакета 2, и проверять чтоб данные первого набора данных были НЕ В втором наборе? |
|||
1
vde69
17.01.12
✎
19:50
|
левое соединение и условие "где маленькийСписок.Поле есть null"
|
|||
2
Fedor
17.01.12
✎
19:57
|
(1) Спасибо!
|
|||
3
Дядя Васька
17.01.12
✎
20:05
|
(1) Ваще не понял как это сработает...
|
|||
4
Дядя Васька
17.01.12
✎
20:07
|
+(3) Вроде ж по левому должны войти все строки большого запроса, и те из маленького, которые соответствуют условию соединения. Может внутреннее?
|
|||
5
Fedor
17.01.12
✎
20:16
|
(4) Левое соединение - в Основном наборе данных.
|
|||
6
Fedor
17.01.12
✎
20:16
|
И условие - тоже для осоновного запроса
|
|||
7
Дядя Васька
17.01.12
✎
20:28
|
(6) Тогда не совсем понятно чем плохо НЕ В, вроде так более громоздко получается.
|
|||
8
le_
17.01.12
✎
20:31
|
выбрать А из т1 где не А в (выбрать Б из т2)
|
|||
9
vde69
17.01.12
✎
22:10
|
(8) использовать "В" имеет смысл только в условии джойна...
в (1) самый оптимальный путь, по сколько джойн большого с малым очень быстрый и проверка на нулл в конце то-же быстрая |
|||
10
Дядя Васька
17.01.12
✎
22:49
|
(9) Так условие все-таки в джойне или в в ГДЕ, в верхнем запросе? Я так понял что получается бесполезный джойн (новых колонок не добавляется) а потом уже в ГДЕ условие на невхождение во вложенный запрос.
|
|||
11
vde69
17.01.12
✎
23:17
|
(10) проверка на нулл конечно в секции "где", то есть сначало джойн а потом условие на нулл по маленькой таблице, тем самым мы оставим только записи из большой таблице которых нет в маленькой
|
|||
12
Дядя Васька
18.01.12
✎
08:17
|
(11) Ну и казалось бы зачем тут джойн, если нужна только проверка...
|
|||
13
kosts
18.01.12
✎
08:26
|
(12) Есть вариант как по другому сделать?
|
|||
14
Starhan
18.01.12
✎
08:28
|
(13)
в(12) прделагает сразу проверку наложить на невхождение в список из подзапроса. Вопрос только в том, что быстрее будет соедеинение и простой отбор НЕ Есть Null или отбор с условием Не В (список из подзапроса) |
|||
15
kosts
18.01.12
✎
08:37
|
(14) А ну да иногда можно и так ...
Я за джойн. |
|||
16
Дядя Васька
18.01.12
✎
08:57
|
(14),(15) Вопрос имеет смысл если этот джойн сам лишние строки уберет, то есть будет не левый, а внутренний и за счет условий соединения в итоговой таблице останется только то что надо, в данном же случае он этого не делает, и используется только для того чтобы в основном запросе можно было обратиться к полю вложенного. Что в общем-то и не нужно.
|
|||
17
le_
18.01.12
✎
09:36
|
(9) Почему?
Чем такой запрос плох? ВЫБРАТЬ
|
|||
18
kosts
18.01.12
✎
10:43
|
(16) (17) Неудобство в сопоставлении реквизитов, что если связать нужно будет не по ссылке, а одновременно еще и по дате.
К тому же фирма 1С рекомендует так не делать, т.к. возможно появление тормозов... В общем на выбор. |
|||
19
Midzgun
18.01.12
✎
10:47
|
За Джоин. Однозначно быстрее!
|
|||
20
Дядя Васька
18.01.12
✎
11:19
|
(18) Ну так джойн надо внутренний использовать, а не левый. В условиях соединения все и проверять, чтобы именно он убрал лишнее. А с левым те же яйца только в профиль, все равно в where проверка, а не в on.
|
|||
21
kosts
18.01.12
✎
21:26
|
(20) Вот запрос от балды, хочется увидеть вариант с внутренним соединением (для самообразования так сказать).
Получить не праздничные дни из графика
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |