|
Помогите с SQL запросом | ☑ | ||
---|---|---|---|---|
0
Супер король
13.04.15
✎
20:25
|
Есть две таблицы:
1 картошка 2 морковь 3 салат 1 андрета 1 патэйта 1 батат 2 сухобузимская 2 импортная 3 зеленый 3 в горшочке первая колонка id нужно из первой таблицы выбрать все записи, а из второй выбрать по одной записи для каждой записи из первой, сопоставленной по id. Не нужно из второй выбирать все подходящие записи. Нужно только по одной, первые попавшиеся. Чтобы их количество равнялось количеству записей из первой таблицы. в результате должно получиться: 1 картошка 1 андрета 2 морковь 2 сухобузимская 3 салат 3 зеленый |
|||
1
mehfk
13.04.15
✎
20:37
|
Напиши на языке запросов 1с и переведи промтом.
|
|||
2
Сергиус
13.04.15
✎
20:39
|
(0)Если правильно понял, то сделай соединение 1-й таблицы с запросом, а в запросе сделай выборку из 2-й и сгруппируй по полю ID, взяв максимум по 2-й колонке..Соединение таблиц по айди же..
|
|||
3
viktor_vv
13.04.15
✎
20:42
|
Select
T1.Id, T1.name, (Select top 1 T2.name From t2 Where t2.Id = t1.Id Order by name ) as name2 From t1 В 1с так не будет работать. Или (1) |
|||
4
фобка
13.04.15
✎
20:43
|
что-то типа
select t.id, t.name, t2.name from tab1 t left join (select top 1 t2.id, t2.name from tab2 t2 where t2.id = t.id) t2 on t.id = t2.id |
|||
5
фобка
13.04.15
✎
20:44
|
(3) по-моему в 1с прокатывает передача поля из другой таблицы в джойне
|
|||
6
Сергиус
13.04.15
✎
20:46
|
(5)Насколько я помню, 1с ругается на top во вложенном запросе
|
|||
7
Сергиус
13.04.15
✎
20:47
|
+(6)Ну хотя здесь нигде не идет речь, что запрос в 1с будет исполняться..
|
|||
8
viktor_vv
13.04.15
✎
20:49
|
(5) Там не join, там в селекте подзапрос, этого еще не понимает.
|
|||
9
фобка
13.04.15
✎
20:51
|
(6) пора вводить новый тип объекта в 1С) "Запрос2", с полноценным сиквелом (но select только)
|
|||
10
фобка
13.04.15
✎
20:53
|
(8) Если память конечно не изменяет в блоке джойна понимает, а в условии и в полях выборки - нет.. пример не дам сейчас, но делал как-то
|
|||
11
mikecool
13.04.15
✎
22:58
|
(9) есть ВТ )
выбрать ид, максимум(чегото) поместить _ВТ из таблица; выбрать ид, чтото, вт.чтото из таблица левое соединение _вт как вт по ид |
|||
12
Супер король
14.04.15
✎
06:20
|
(2) С группировкой тяжелый запрос получается
(3) Отлично, хороший запрос, быстрый. Спасибо |
|||
13
Simod
14.04.15
✎
06:47
|
Коррелирующий подзапрос:
ВЫБРАТЬ 1 КАК id, "картошка" КАК А ПОМЕСТИТЬ Табл_1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2, "морковь" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3, "салат" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ 1 КАК id, "андрета" КАК Б ПОМЕСТИТЬ Табл_2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1, "патэйта" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1, "батат" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2, "сухобузимская" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2, "импортная" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3, "зеленый" ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3, "в горшочке" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Т_1.id, Т_1.А, Т_2.id КАК id1, Т_2.Б ИЗ Табл_1 КАК Т_1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Табл_2 КАК Т_2 ПО Т_1.id = Т_2.id ГДЕ Т_2.Б В (ВЫБРАТЬ МАКСИМУМ(Табл_2.Б) ИЗ Табл_2 ГДЕ Табл_2.id = Т_1.id) |
|||
14
Супер король
14.04.15
✎
07:57
|
(13) Тоже вариант, но (3) проще и наверное быстрее будет.
|
|||
15
dk
14.04.15
✎
08:00
|
что-то капец варианты пошли
select товары.товар, max(выдитоваров.видтовара) from товары left join видытоваров по ... group by товар |
|||
16
Супер король
14.04.15
✎
08:02
|
(15) плохой запрос. Тяжелый.
|
|||
17
Супер король
14.04.15
✎
08:04
|
в общем три варианта в итоге. Один быстрый и простой, другой чуть посложнее, и третий самый медленный с "group by"
|
|||
18
Супер король
14.04.15
✎
08:08
|
Хотя второй вариант тоже медленный, так МАКСИМУМ как group by по сути.
|
|||
19
Jaap Vduul
14.04.15
✎
09:32
|
Для sql2k5 и старше можно ещё cross apply заюзать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |