|
Запрос соединение: ограничение количества записей | ☑ | ||
---|---|---|---|---|
0
fjay69
30.07.21
✎
12:35
|
Возможно ли ограничить количество записей, которые окажутся в итоговой таблице из правой таблицы?
Пусть имеем Таб1 Кол1 Знач И Таб2 Кол1 Кол2 Знач 1111 Знач 2222 Если я укажу в запросе из Таб1 левое соединение Таб2 по Таб1.Кол1 = Таб2.Кол2 то итоговая таблица будет Кол1 Кол2 Знач 1111 Знач 2222 А можно ли, что если одной строке левой таблицы по условиям соединения соответствует несколько строк правой таблицы, в итоговую таблицу переносить, например, только одну (первую, соответствующую условиям соединения)? |
|||
1
polosov
30.07.21
✎
12:36
|
(0) 1Сный язык запросов не умеет.
|
|||
2
Asmody
30.07.21
✎
12:39
|
(0) правильно "приготовить" правую таблицу? например, обеспечить уникальность по полям соединения
|
|||
3
МихаилМ
30.07.21
✎
12:40
|
можно. если удавться определить критерии первости
|
|||
4
polosov
30.07.21
✎
12:42
|
(0) Можно либо (2) либо сгруппировать по какому-нибудь максимуму после соединения.
|
|||
5
Said_We
30.07.21
✎
12:44
|
(0)
"из Таб1 левое соединение Таб2 по Таб1.Кол1 = Таб2.Кол2" Вернет наверное: Кол1 Кол2 Знач NULL Может так было изначально? "из Таб1 левое соединение Таб2 по Таб1.Кол1 = Таб2.Кол1" |
|||
6
Малыш Джон
30.07.21
✎
12:47
|
(0) если определишься для себя что значит "первая, соответствующая условиям соединения", то конечно можно
|
|||
7
fjay69
30.07.21
✎
12:50
|
Придумал хитрую схему:
1. Добавляем в Таб2 АвтоНомерЗаписи(); 2. Соединяем Таб1 и Таб2 и группируем по автономеру (мин или макс) 3. Соединяем таблицу из п.2 с Таб2 по автономеру |
|||
8
Малыш Джон
30.07.21
✎
12:52
|
(7) вот неделю назад только разбирали такой случай:
СКД - как вывести две таблицы рядом, то есть параллельно |
|||
9
fjay69
30.07.21
✎
12:54
|
Хорошо. Всем спасибо!
|
|||
10
Said_We
30.07.21
✎
13:05
|
(7) Схема стандартная.
Когда будешь добавлять АвтоНомерЗаписи() не забудь что он бывает только во внутренней таблице и только с использованием ВЫБРАТЬ ПЕРВЫЕ ХХХХХХ где ХХХХХХ очень большое число. |
|||
11
Said_We
30.07.21
✎
13:06
|
Да и "УПОРЯДОЧИТЬ ПО" обязательно указать. :-)
|
|||
12
Малыш Джон
30.07.21
✎
13:08
|
(10)>> он бывает только во внутренней таблице и только с использованием ВЫБРАТЬ ПЕРВЫЕ ХХХХХХ
не во внутренней, а во временной и ПЕРВЫЕ - не обязательно использовать |
|||
13
Малыш Джон
30.07.21
✎
13:09
|
(11) тоже нет
|
|||
14
ptiz
30.07.21
✎
13:10
|
Тогда уж в тему.
Почему такой запрос выдаёт две записи, а не одну? ВЫБРАТЬ "Знач" КАК Кол1 ПОМЕСТИТЬ ТЗ1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ "Знач" КАК Кол1, 1111 КАК Кол2 ПОМЕСТИТЬ ТЗ2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Знач", 2222 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЗ1.Кол1 КАК Кол1, ТЗ2.Кол2 КАК Кол2 ИЗ ТЗ1 КАК ТЗ1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ2 КАК ТЗ2 ПО ТЗ1.Кол1 = ТЗ2.Кол1 ГДЕ (ТЗ2.Кол1, ТЗ2.Кол2) В (ВЫБРАТЬ ПЕРВЫЕ 1 ТЗ2.Кол1, ТЗ2.Кол2 ИЗ ТЗ2 КАК ТЗ2 ГДЕ ТЗ2.Кол1 = ТЗ1.Кол1) |
|||
15
ptiz
30.07.21
✎
13:12
|
ВЫБРАТЬ ПЕРВЫЕ 1 - должен выдавать одну и ту же запись, но условие прокатывает для разных записей ТЗ2
|
|||
16
Said_We
30.07.21
✎
13:12
|
(12) "Внутренняя" - оговорился. Вы же поняли что я имею ввиду.
|
|||
17
Малыш Джон
30.07.21
✎
13:14
|
(14) у меня этот запрос одну запись выдает
|
|||
18
ptiz
30.07.21
✎
13:15
|
(17) Серверная база? У меня 2.
|
|||
19
Малыш Джон
30.07.21
✎
13:16
|
(18) это на файловой, сейчас на серверной попробую
|
|||
20
Kassern
30.07.21
✎
13:17
|
(14) у меня 1 запись в консоли запросов
|
|||
21
Малыш Джон
30.07.21
✎
13:18
|
(18) на серверной тоже 1 запись
8.3.17.2231 |
|||
22
ptiz
30.07.21
✎
13:18
|
8.2 - на файловой и серверной выдаёт 2 записи.
8.3 - одну :) |
|||
23
Малыш Джон
30.07.21
✎
13:19
|
(22) ¯\_(ツ)_/¯
|
|||
24
ptiz
30.07.21
✎
13:20
|
В 8.1 - тоже одну.
1С такая непостоянная. |
|||
25
Kassern
30.07.21
✎
13:21
|
(24) а временные таблицы в какой версии появились? Раньше же вложенные запросы только были
|
|||
26
Said_We
30.07.21
✎
13:21
|
(25) 8.1.15 по поему
|
|||
27
Kassern
30.07.21
✎
13:23
|
(22) сравните в скуле запросы в 8.2 и 8.3 и найдете причину
|
|||
28
Said_We
30.07.21
✎
13:23
|
(13) Да. Если Упорядочить По есть, то обязательно. Зачем такое ограничение - не знаю.
|
|||
29
Малыш Джон
30.07.21
✎
13:34
|
(28) если есть УПОРЯДОЧИТЬ ПО, то ПЕРВЫЕ обязательно, если нет - то нет
|
|||
30
Малыш Джон
30.07.21
✎
13:48
|
+(29) это к нумерации записей отношения не имеет, просто если размер временной таблицы не ограничен, то сортировать её нельзя
|
|||
31
Said_We
30.07.21
✎
14:35
|
(30) АвтоНомерЗаписи(), как правило, используют с сортировкой. Поэтому, косвенно имеет.
В чем острая необходимость в 1С АвтоНомерЗаписи() использовать только во временных таблицах? |
|||
32
ptiz
30.07.21
✎
14:55
|
(27) Да, запросы разные.
8.2: SELECT T1._Q_000_F_000, T2._Q_001_F_001 FROM #tt1 T1 WITH(NOLOCK) INNER JOIN #tt2 T2 WITH(NOLOCK) ON (T1._Q_000_F_000 = T2._Q_001_F_000) WHERE EXISTS(SELECT TOP 1 1 FROM #tt2 T3 WITH(NOLOCK) WHERE ((T3._Q_001_F_000 = T1._Q_000_F_000)) AND (T2._Q_001_F_000 = T3._Q_001_F_000) AND (T2._Q_001_F_001 = T3._Q_001_F_001)) 8.3: SELECT T1._Q_000_F_000, T2._Q_001_F_001 FROM #tt1 T1 WITH(NOLOCK) INNER JOIN #tt2 T2 WITH(NOLOCK) ON (T1._Q_000_F_000 = T2._Q_001_F_000) WHERE EXISTS(SELECT 1 FROM (SELECT TOP 1 T4._Q_001_F_000 AS Q_002_F_000_, T4._Q_001_F_001 AS Q_002_F_001_ FROM #tt2 T4 WITH(NOLOCK) WHERE (T4._Q_001_F_000 = T1._Q_000_F_000)) T3 WHERE (T2._Q_001_F_000 = T3.Q_002_F_000_) AND (T2._Q_001_F_001 = T3.Q_002_F_001_)) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |