|
v8: Прошу помощи в написании запроса | ☑ | ||
---|---|---|---|---|
0
qubasesx
19.07.13
✎
12:38
|
Задача. Есть Регистр1 и Регистр2. Они содержат записи, у которых есть одинаковый реквизит "Номер". В Регистре1 записей на 10 больше, чем в Регистре2. Нужно, чтобы запрос отобрал из этих 10 записей Регистра1, которые отсутствуют в Регистре2, те, которые соответствуют параметру "Наименование"
Вот мой вариант запроса. В нём я пытаюсь сделать, чтобы неотображались те записи: - у которых одинаковое значение поля "Номер" - и те, что не соответствуют параметру "Наименование" |ВЫБРАТЬ | Регистр1.Номенклатура, | Регистр1.РегистрационныйНомер, |ИЗ | РегистрНакопления.Регистр1 КАК Регистр1 |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр2 КАК Регистр2 |ПО (Регистр2.РегистрационныйНомер <> Регистр1.РегистрационныйНомер) |ГДЕ | Регистр1.Номенклатура = &Наименование В результате выполнения запроса отбираются только записи, соответствующие параметру "Наименование", но в большом количестве один экземпляр. И отбираются из всего списка, а не из тех записей, которые отсутствуют в Регистре2. В чём ошибки? |
|||
1
Zerg80
19.07.13
✎
12:41
|
(0) "В чём ошибки?" - во многом :)
Сделай вот так: ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр2 КАК Регистр2 |ПО (Регистр2.РегистрационныйНомер = Регистр1.РегистрационныйНомер) |ГДЕ | Регистр2.РегистрационныйНомер ЕСТЬ NULL |
|||
2
qubasesx
19.07.13
✎
12:42
|
(1) ща попробую
|
|||
3
qubasesx
19.07.13
✎
12:46
|
нет, не то. Да и в регистрах нет пустых полей.
|
|||
4
Тролль главный
19.07.13
✎
12:47
|
(3) именно то, ты нам врешь, показывай как "исправил"
|
|||
5
qubasesx
19.07.13
✎
12:51
|
|ВЫБРАТЬ
| Регистр1.Номенклатура, | Регистр1.РегистрационныйНомер, |ИЗ | РегистрНакопления.Регистр1 КАК Регистр1 |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр2 КАК Регистр2 |ПО (Регистр2.РегистрационныйНомер <> Регистр1.РегистрационныйНомер) |ГДЕ | Регистр1.Номенклатура = &Наименование | И Регистр2.РегистрационныйНомер ЕСТЬ NULL |
|||
6
Ненавижу 1С
гуру
19.07.13
✎
12:52
|
(5) ты идиот? посмотри внимательно на (1) там
ПО (Регистр2.РегистрационныйНомер = Регистр1.РегистрационныйНомер) |
|||
7
Zerg80
19.07.13
✎
12:52
|
(5) <> на = в условии связи то поменяй
|
|||
8
Zerg80
19.07.13
✎
12:53
|
(6) Спокойнее, коллега :) Пятница все же
|
|||
9
Жан Пердежон
19.07.13
✎
12:55
|
(6) а значит этот фрагмент кода тебя устраивает?)
Регистр1.Номенклатура = &Наименование |
|||
10
qubasesx
19.07.13
✎
12:56
|
(9) без него никуда
|
|||
11
qubasesx
19.07.13
✎
12:56
|
поменял <> на = и заработало, всем спасибо!
|
|||
12
EvgeniuXP
19.07.13
✎
12:57
|
(10) номенклатура и наименование типы разные!
|
|||
13
qubasesx
19.07.13
✎
12:57
|
(6) полегче на поворотах, пожалуйста
|
|||
14
EvgeniuXP
19.07.13
✎
12:57
|
ссылку со строкой сравниваешь - что будет?
|
|||
15
Ненавижу 1С
гуру
19.07.13
✎
12:58
|
(9) назвать может как хошь, мож там ссылка
(13) радуйся, что советы даю |
|||
16
qubasesx
19.07.13
✎
12:58
|
(13) почему со строкой? в регистре ссылка и в &Наименование я передаю тоже ссылку
|
|||
17
Zerg80
19.07.13
✎
12:58
|
(14) Судя по тому, что в (0) написано "В результате выполнения запроса отбираются только записи, соответствующие параметру "Наименование" - то тут с условием все ОК
|
|||
18
EvgeniuXP
19.07.13
✎
12:59
|
(16) и кто так пишет код? пиши вместо наименование ВыбНоменклатура или еще как. Наименование обычно строка.
|
|||
19
Жан Пердежон
19.07.13
✎
12:59
|
(16) так переменные называют только судаки
|
|||
20
andreymongol82
19.07.13
✎
12:59
|
(16) Ааа! Так вот про что твоя предыдущая тема была!
|
|||
21
Zerg80
19.07.13
✎
13:00
|
(18) Ну это да, попахивает слегка
|
|||
22
qubasesx
19.07.13
✎
13:00
|
(20) :)
|
|||
23
qubasesx
19.07.13
✎
13:01
|
(19) судаки это те кто не понимают, что для того, чтобы разместить код на форуме, переменные можно и переименовать, чтобы коротелькими стали
|
|||
24
EvgeniuXP
19.07.13
✎
13:04
|
(23) ой, не надо а? Ты через 5 лет будешь потом свой код через отладчик смотреть и анализ делать какой тип? или хочешь быстро прочитать код и понять, что он делает предварительно приняв элементарный код оформления. Сам же потом запутаешься и других запутаешь своей неаккуратностью.
|
|||
25
Жан Пердежон
19.07.13
✎
13:05
|
(23) себе хоть не ври
|
|||
26
EvgeniuXP
19.07.13
✎
13:08
|
(23) критику надо принимать как должное, а не огрызаться :)
|
|||
27
qubasesx
19.07.13
✎
13:10
|
(25)я даже тебе ещё ни разу не соврал, а уж себе-то тем более
|
|||
28
qubasesx
19.07.13
✎
13:11
|
(26) согласен, но хамство сплош, а не критика
|
|||
29
qubasesx
19.07.13
✎
13:12
|
(24) пожалуй соглашусь :)
|
|||
30
Жан Пердежон
19.07.13
✎
13:13
|
(27) то есть перед копипастой на форум ты меня названия переменных?? ну-ну
|
|||
31
Жан Пердежон
19.07.13
✎
13:13
|
*меняешь
|
|||
32
qubasesx
19.07.13
✎
13:16
|
(30) для особо одарённых: не ПЕРЕД, а после
|
|||
33
Жан Пердежон
19.07.13
✎
13:18
|
(32) особо одаренные уже в (23) отписались
|
|||
34
EvgeniuXP
19.07.13
✎
13:18
|
(32) это как, извольте?
|
|||
35
EvgeniuXP
19.07.13
✎
13:18
|
пятница - тоже торможу
|
|||
36
EvgeniuXP
19.07.13
✎
13:21
|
одаренный человек, кстати, у него уже есть конструктор под веб-форму мисты :) запросы прямо в вебе пишет :)
|
|||
37
qubasesx
19.07.13
✎
13:21
|
(33) да нет, они в 30 продолжали задавать вопросы, в 33 выпендриваться
|
|||
38
qubasesx
19.07.13
✎
13:22
|
(36) извини за глупый вопрос, но зачем нужна строчка РезервыКоробок.РегистрационныйНомер ЕСТЬ NULL, она же ничего в условие не добавляет по сути?
|
|||
39
EvgeniuXP
19.07.13
✎
13:24
|
(38) чтобы отобрать пустые регистрационные номера, написано в условии ГДЕ
|
|||
40
Zerg80
19.07.13
✎
13:25
|
(38) Потому что в (0) написано, что "чтобы запрос отобрал из этих 10 записей Регистра1, которые отсутствуют в Регистре2"
|
|||
41
EvgeniuXP
19.07.13
✎
13:25
|
убери эту строчку увидишь много записей, добавь эту строчку - наложится фильтр, посмотри в результате, что сейчас в РегистрационномНомере находится.
|
|||
42
qubasesx
19.07.13
✎
13:25
|
(39) ну это я понял. но пустых нет, а без строчки не работает
|
|||
43
Zerg80
19.07.13
✎
13:26
|
(38) Ты же знаешь, как лефт джоин работает, да??
|
|||
44
andreymongol82
19.07.13
✎
13:26
|
(42) Как это нет? Там же соединение левое двух таблиц. если таблицы не равны - обязательно будут пустые
|
|||
45
EvgeniuXP
19.07.13
✎
13:28
|
(42) потому что из регистра 1 берешь регистрационный номер, возьми из регистра 2 :)
|
|||
46
EvgeniuXP
19.07.13
✎
13:28
|
|ВЫБРАТЬ
| Регистр1.Номенклатура, | Регистр2.РегистрационныйНомер, |
|||
47
qubasesx
19.07.13
✎
13:28
|
(44) имеется в виду не пустой реквизит, а пустые места, где должны быть строчки, которых нет? :)
|
|||
48
qubasesx
19.07.13
✎
13:29
|
(43) да, когда я работал с лефтжойном на делфи, таких проблем не было, там было всё логично
|
|||
49
Жан Пердежон
19.07.13
✎
13:29
|
(43) сейчас скажет, что ты тоже выпендриваешься)))
|
|||
50
Жан Пердежон
19.07.13
✎
13:30
|
(48) лефтджоин в делфи - это совсем другое дело!
|
|||
51
andreymongol82
19.07.13
✎
13:30
|
(48) Чем левое соединение в 1С принципиально отличается от в дельфи, если там все так логично было?
|
|||
52
qubasesx
19.07.13
✎
13:31
|
(49) не скажет (50) согласен
|
|||
53
EvgeniuXP
19.07.13
✎
13:32
|
ВЫБРАТЬ
| Регистр1.Номенклатура, | Регистр1.РегистрационныйНомер КАК РегистрационныйНоме1, | Регистр2.РегистрационныйНомер КАК РегистрационныйНоме2, увидел? |
|||
54
qubasesx
19.07.13
✎
13:33
|
(51) принципиально ничем, но там не было этой строки, если задуматься, то она не нужна. хотя может я уже просто уже туплю, пятница концы концов
|
|||
55
qubasesx
19.07.13
✎
13:37
|
(53) нет, смотрю на запрос и не врубаюсь
|
|||
56
qubasesx
19.07.13
✎
13:37
|
ладно, всем Спасибо! тема закрыта
|
|||
57
andreymongol82
19.07.13
✎
13:37
|
(54) Принципиальное отличие, что в нету в дельфи left join. Он есть в SQL. (Я не выпендриваюсь нет?)
|
|||
58
andreymongol82
19.07.13
✎
13:38
|
(55) Надо на выборку посмотреть и что в ней есть
|
|||
59
Zerg80
19.07.13
✎
13:39
|
(54) Конечно она в выборке не нужна, NULL же там. И вообще мне кажется, что 50+ постов в топике, где проблема была в 2 (двух) строках в запросе - это как-то неспортивно :)
|
|||
60
qubasesx
19.07.13
✎
13:42
|
я предлагал (56)
|
|||
61
Жан Пердежон
19.07.13
✎
13:42
|
(59) пятница же
|
|||
62
EvgeniuXP
19.07.13
✎
13:42
|
введи значения, чтобы РегистрационныйНомер1 не равнялся РегистрационныйНомер2 по одной номенклатуре - т.е. два поля должны быть заполнены - тогда и увидишь разницу.
|
|||
63
EvgeniuXP
19.07.13
✎
13:43
|
у тебя похоже таких записей нет - вот и результат один и тот же :)
|
|||
64
Ненавижу 1С
гуру
19.07.13
✎
13:55
|
в делфи нет неопределено и пустых ссылок, но есть nil
|
|||
65
hhhh
19.07.13
✎
14:00
|
(64) слабаки
|
|||
66
andreymongol82
19.07.13
✎
14:00
|
(64) А в запросах 1С есть NULL. И в SQL есть NULL. А nil - примерно соответствует "неопределено". Не надо тут путать паскаль и SQL. В данном случае на SQL запрос выглядел бы очень похожем на запрос в 1С, тока по английски.
И ссылки в 1С и дельфи имеют несколько разную природу. |
|||
67
andreymongol82
19.07.13
✎
14:02
|
(66) эээээ, блин, это автору темы. Прошу пардону.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |