|
Левое соединение или оператор "В" | ☑ | ||
---|---|---|---|---|
0
ЭЦ
19.08.21
✎
19:08
|
ГОСПОДА !
Как более грамотно выбрать всех не лысых если имеется таблица всех людей и всех лысых людей. Возможены варианты ВЫБРАТЬ ТаблицаВсех.ФизЛицо ИЗ ТаблицаВсех ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаЛысых ПО ТаблицаВсех.ФизЛицо = ТаблицаЛысых.ФизЛицо ГДЕ ТаблицаЛысых.ФизЛицо ЕСТЬ NULL или ВЫБРАТЬ ТаблицаВсех.ФизЛицо ИЗ ТаблицаВсех ГДЕ НЕ ТаблицаВсех.ФизЛицо В (ВЫБРАТЬ ТаблицаЛысых.ФизЛицо ИЗ ТаблицаЛысых) Прошу подсказать. |
|||
1
Guk
19.08.21
✎
19:10
|
(0) первый запрос не выберет всех не лысых...
|
|||
2
ЭЦ
19.08.21
✎
19:13
|
(1) Уважаемый. Разрешите с Вами не согласиться - он выберет.
|
|||
3
Asmody
19.08.21
✎
19:13
|
"НЕ В()" в запросе – это чаще всего кошмар
|
|||
4
rphosts
19.08.21
✎
19:16
|
в первом запросе вместо ГДЕ не должно быть ИМЕЮЩИЕ?
Второй запрос должен быть транслирован оптимизатором запросов в Semi Join и наверное должен быть оптимальнее (чисто умозрительнее, извини влом...)... но скорее можно сделать ещё лучше если втащить лысых в ВТ и искать в ВТ или даже так: втащить в ВТ + индексировать ВТ по полю поиска |
|||
5
ЭЦ
19.08.21
✎
19:19
|
(4) Хор.
Пусть обе таблицы будут Проиндексированные ВТ. Тогда как лучше? (3) В чем состоит ужас "НЕ" в запросе прошу пояснить |
|||
6
Asmody
19.08.21
✎
19:21
|
(5) само по себе НЕ не кошмар. а вот сочетание НЕ В() уже не очень.
|
|||
7
rphosts
19.08.21
✎
19:29
|
(5) нагенери себе большие таблички и сделай несколько раз замер времени выполнения запроса... Получиш объективный ответ
|
|||
8
rphosts
19.08.21
✎
19:30
|
Все же не semi join а exists видимо.
|
|||
9
ЭЦ
19.08.21
✎
19:30
|
(6) т.е. Вы за 1-ый вариант?
(7) Я надеюсь тут ктото уже нагенерил. |
|||
10
Ненавижу 1С
гуру
19.08.21
✎
20:22
|
Я еще умею через объединить все в подзапросе
|
|||
11
Asmody
19.08.21
✎
20:28
|
(9) "За" или "против" скажет только профайлер. И, да, на разных объемах таблиц результат может быть разным.
|
|||
12
ДенисЧ
19.08.21
✎
20:28
|
(9) А ты уже заплатил за нагенерить? ))
|
|||
13
ДенисЧ
19.08.21
✎
20:29
|
(11) Почему "может"?
|
|||
14
Asmody
19.08.21
✎
20:31
|
(13) Я нарочно не стал быть категоричным
|
|||
15
Spieluhr
19.08.21
✎
20:38
|
(0) А в чем измеряется грамотность в данном случае? Грамотно - это сколько?
|
|||
16
Asmody
19.08.21
✎
21:04
|
(15) На полшишечки
|
|||
17
VS-1976
19.08.21
✎
22:24
|
В данном случае, я за левое соединение, тем более что левые связи всегда приятнее )
|
|||
18
Ёпрст
19.08.21
✎
22:31
|
(0) план запроса посмотри, он скорее всего будет одинаков. инер джоин жешь
|
|||
19
Sammo
20.08.21
✎
07:43
|
Сталкивался с проблемой, что когда большое количество значений по которым идет В () то бывают проблемы с производительностью. Левое в этом смысле стабильнее.
Либо посмотри как сделать, чтобы в скуле в преобразовывалось не в in, а в exist |
|||
20
Sammo
20.08.21
✎
07:44
|
+19 например, речь про большое количество значений, когда не селективный индекс и на очень большой таблице скуль сваливается в перебор
|
|||
21
Малыш Джон
20.08.21
✎
08:19
|
(16) ну возможно ТСу такого уровня грамотности недостаточно? Поэтому и заводит такие темы
|
|||
22
Малыш Джон
20.08.21
✎
08:19
|
(0) делай через объединение: красота, нет ни левых соединений, ни левых условий
|
|||
23
Ёпрст
20.08.21
✎
09:33
|
(22) как он это сделает, если EXCEPT в 1с не завезли?
|
|||
24
ЭЦ
20.08.21
✎
10:25
|
(10,22) Через объединить - это примерно так?
ВЫБРАТЬ Подзапрос.ФизЛицо ИЗ (ВЫБРАТЬ ТаблицаВсех.ФизЛицо, 1 КАК Кол ИЗ ТаблицаВсех ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТаблицаЛысых.ФизЛицо, 1 ИЗ ТаблицаЛысых ) КАК Подзапрос ГДЕ СУММА(Подзапрос.Кол) = 1 СГРУППИРОВАТЬ ПО Подзапрос.ФизЛицо |
|||
25
mistеr
20.08.21
✎
10:41
|
(0) Левое соединение, согласно рекомендациям 1С.
|
|||
26
Малыш Джон
20.08.21
✎
11:45
|
(23) Если есть мозги, то неважно завезли чего куда или нет. Если мозгов нет, то опять-таки, всё вышенаписанное неважно.
|
|||
27
Ненавижу 1С
гуру
20.08.21
✎
11:49
|
(24) почти
ВЫБРАТЬ Подзапрос.ФизЛицо ИЗ (ВЫБРАТЬ ТаблицаВсех.ФизЛицо, 0 КАК Кол ИЗ ТаблицаВсех ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТаблицаЛысых.ФизЛицо, 1 ИЗ ТаблицаЛысых ) КАК Подзапрос СГРУППИРОВАТЬ ПО Подзапрос.ФизЛицо ИМЕЮЩИЕ СУММА(Подзапрос.Кол) = 0 |
|||
28
seevkik
20.08.21
✎
11:56
|
Всё зависит от интерпретатора, но соединения сильно стабильнее, чем "В", да и имхо легче читать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |