|
v7: SQL запрос левое содинение | ☑ | ||
---|---|---|---|---|
0
PRO100 NigGaZ
12.08.13
✎
19:47
|
"SELECT Номенклатура [Номенклатура $Справочник.Номенклатура]
, Остаток Остаток FROM ((SELECT Номенклатура.ID Ном FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK) WHERE ($Номенклатура.Артикул LIKE '%*%')) AS Товар LEFT JOIN (SELECT ОстаткиТМЦОстатки.Номенклатура Номенклатура , Sum(ОстаткиТМЦОстатки.КоличествоОстаток) Остаток FROM $РегистрОстатки.ОстаткиТМЦ(,,, Номенклатура,) AS ОстаткиТМЦОстатки GROUP BY ОстаткиТМЦОстатки.Номенклатура) AS Остатки ON Товар.Ном = Остатки.Номенклатура ) GROUP BY Остатки.Номенклатура, Остатки.Остаток" в левой таблице 573 записи в правой таблице 3313 записей на выходе получается результат как в Inner Join 281 запись, не понимаю почему ожидаю что должны быть все записи из левой таблицы, а тех которых нет в правой должны быть нули, но их нет в QA после объединения 573 записи (нужный результат), а после Hash Match становится 281 |
|||
1
КонецЦикла
12.08.13
✎
20:02
|
Это точно весь текст? :)
Будут не нули а null |
|||
2
PRO100 NigGaZ
12.08.13
✎
20:03
|
путь будут null
да весь текст [code] "| |SELECT Номенклатура [Номенклатура $Справочник.Номенклатура] |, Остаток Остаток |FROM |((SELECT Номенклатура.ID Ном |FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK) |WHERE ($Номенклатура.Артикул LIKE '%*%')) AS Товар |LEFT JOIN |(SELECT ОстаткиТМЦОстатки.Номенклатура Номенклатура | , Sum(ОстаткиТМЦОстатки.КоличествоОстаток) Остаток |FROM $РегистрОстатки.ОстаткиТМЦ(,,, | Номенклатура,) AS ОстаткиТМЦОстатки |GROUP BY ОстаткиТМЦОстатки.Номенклатура) AS Остатки ON Товар.Ном = Остатки.Номенклатура |) |GROUP BY Остатки.Номенклатура, Остатки.Остаток |" [/code] |
|||
3
PRO100 NigGaZ
12.08.13
✎
20:06
|
и он выполняется
Номенклатура $Справочник.Номенклатура Остаток ------------------------------------- ---------------------------------------- 5OD 11.00000 801 8.00000 8XZ 52.00000 |
|||
4
КонецЦикла
12.08.13
✎
20:08
|
Только позиции с остатками выводятся?
Надо все товары с артикулом подобным *? Зачем в груп бай обернул? |
|||
5
PRO100 NigGaZ
12.08.13
✎
20:11
|
да выводятся только с остатками
Да это только частный пример отбора по вхождению в артикул в каком месте? GROUP BY Остатки.Номенклатура, Остатки.Остаток потому что суммировать не надо (значение одно) и без такой группировки ошибка (если убрать Остатки.Остаток и суммировать то результат тот же) GROUP BY ОстаткиТМЦОстатки.Номенклатура Нужна сумма остатков по этой группировке |
|||
6
PRO100 NigGaZ
12.08.13
✎
20:18
|
и запрос нужен именно с left join чтобы результаты последующих запросов отфильтровать и потом работать с нужными данными, в идеале в справочнике 7тыс строк, а после всех фильтров должно стать примерно 1,5тыс
пробовал объединять в каждом запросе но время выполнения увеличивается с каждым объединением, поэтому быстрее по всем данным а потом отфильтровать... |
|||
7
m-serg74
12.08.13
✎
20:25
|
(2) самый внешний селект из правой таблицы? это есть правильно?
|
|||
8
PRO100 NigGaZ
12.08.13
✎
20:30
|
самый внешний селект из объединения двух таблиц (Товар LEF JOIN Остатки)
в товаре отобранные элементы справочника номенклатура в Остатках все остатки и еще почему могут образоваться такая запись? Номенклатура $Справочник.Номенклатура Остаток ------------------------------------- ---------------------------------------- NULL NULL |
|||
9
m-serg74
12.08.13
✎
20:35
|
(8) СЕЛЕКТ Номенклатура это из правой таблицы, в левой она Ном у тебя, потому и нулл выходит так как не соединилось, напиши сам запрос красиво, иначе не поймешь что откуда
|
|||
10
m-serg74
12.08.13
✎
20:35
|
|
|||
11
PRO100 NigGaZ
12.08.13
✎
20:36
|
Разобрался последняя группировка должна быть по левой таблице...
SELECT Номенклатура [Номенклатура $Справочник.Номенклатура], Остаток Остаток FROM ((SELECT Номенклатура.ID Ном FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK) WHERE ($Номенклатура.Артикул LIKE '%*%')) AS Товар LEFT JOIN (SELECT ОстаткиТМЦОстатки.Номенклатура Номенклатура, Sum(ОстаткиТМЦОстатки.КоличествоОстаток) Остаток FROM $РегистрОстатки.ОстаткиТМЦ(,,,Номенклатура,) AS ОстаткиТМЦОстатки GROUP BY ОстаткиТМЦОстатки.Номенклатура) AS Остатки ON Товар.Ном = Остатки.Номенклатура) GROUP BY Товар.Ном, Остатки.Остаток |
|||
12
m-serg74
12.08.13
✎
20:38
|
(11) а почему вообще не
SELECT Ном [Номенклатура $Справочник.Номенклатура], Остаток Остаток |
|||
13
PRO100 NigGaZ
12.08.13
✎
20:39
|
да правда... исправил у себя в этом месте забылся...
|
|||
14
m-serg74
12.08.13
✎
20:39
|
(11) GROUP BY
Товар.Ном, Остатки.Остаток на фига группировка по Остаток, вроде ее суммировать надо иначе ваще зачем группировка? |
|||
15
PRO100 NigGaZ
12.08.13
✎
20:41
|
а результат что суммирования, что группировки одинаковый, или это знак плохого тона группировать вместо суммирования?
|
|||
16
m-serg74
12.08.13
✎
20:42
|
(15) не вместо, а группировать по всем полям и не делать ни сумма ни количество, какой смысл группировать тогда, сотри вообще на фиг последнее ГРУПП БАЙ
|
|||
17
PRO100 NigGaZ
12.08.13
✎
22:28
|
действительно О_о спасибо! :)
|
|||
18
toypaul
гуру
12.08.13
✎
22:37
|
есть мысль что груп бай отбрасывает нулл по полю Остаток. в груп бай конечно это поле = полный бред
|
|||
19
PRO100 NigGaZ
13.08.13
✎
08:38
|
нет не отбрасывает, и наличие группировки не несет никакой нагрузки, а вот то что селект был по правой таблице это была проблема
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |