SQL как "заджойнить" одну таблицу #518915


#0 by фобка
Привет Пишу запрос: |Select a.VIN, b.VIN  From archive_m a В таблице нет записей с TransportType = 2, то есть на выходе в теории должно быть две колонки в правом NULL. Но результат выполнения запроса в этом случае вообще ноль записей. Пробую написать кривее: результат какой нужно, но смущает сам запрос. Почему не отрабатывает первый запрос?
#1 by Ненавижу 1С
плохо теорию читал условие ставить надо тогда не в WHERE, а в ON
#2 by фобка
|Select a.VIN, b.VIN  From archive_m a Так? Результат не правильный, оч. много записей на выходе, даже не знаю, что это за связь
#3 by Ненавижу 1С
сам себе сформулируй что ты хочешь получить в результате
#4 by antoneus
inner join попробуй
#5 by Skom
я че та не вкурил From archive_m НАКУЯ???
#6 by Skom
ты чего получить то пытаешься???
#7 by фобка
сформулировал, в таблице существуют две или одна запись с одинаковым идентификатором (INTG_ORDRNMB), и разными (TransportType). На выходе хочу иметь одну запись для одного идентификатора с разными значениями других полей. Второй запрос отработал правильно, но смущает само написание, и думаю что отрабатывать он будет дольше
#8 by Skom
Поиск дублирующихся элементов Выберем все элементы справочника Контрагенты, у которых совпадают ИНН ТекстЗапроса = "
#9 by фобка
мне нужны все записи из левой и совпадающие из правой
#10 by Ёпрст
or
#11 by фобка
мне дубли не нужны, мне нужно все в одну "строку" сложить
#12 by фобка
к сожалению нет, в правой теперь вместо Null все значения из левой
#13 by Ёпрст
используй count  и having в условии к 1 табличке и привет, и не надо джойнить ничего
#14 by el-gamberro
union all
#15 by kroll
Смотри, убираем из первоначального запроса 1 условия (and b.TransportType = 2) |Select a.VIN, b.VIN  From archive_m a получается таблица на выходе. В колонке b.vin по твоему утверждению нет значений TransportType = 2. Так А теперь добавляем условие and b.TransportType = 2 (получаем первоначальный текст запроса). Ессно не будет ничего на выходе... Ты же говоришь своим запросом - показать строки, для которых b.TransportType = 2 Понятно хоть разъяснил?
#16 by фобка
ок, ща почитаю юнион даст две записи
#17 by el-gamberro
16 0_о какие 2 записи???
#18 by Ёпрст
можешь не читать..@Skom тебе готовый код дал.
#19 by фобка
таблица VIN INTG_ORDRNMB TransportType a1  1            1     на выходе с юнионом будет VIN a1 a2 a1 нужно
#20 by упс
Добавьте условие OR b.TransportType IS NULL к своему первоначальному запросу. Т.е. Where a.TransportType = 1 and (b.TransportType = 2 OR b.TransportType IS NULL).
#21 by Ёпрст
#22 by упс
гоню
#23 by фобка
ну, ребят..мне не нужна группировка. мне нужны будут еще остальные значения (там колонок больше 20) для обоих записей, но только в одной строке.. перекур
#24 by Skom
жесть.))
#25 by Skom
+23 ты давай тогда полностью что те надо. а то.....
#26 by Grusswelle
Оришинальный ход мысли, правда-правда!
#27 by фобка
видимо так и отрабатывает, алиясы игнорируются так вроде всё расписал, скрин приложить? :) или разъяснить реальный смысл задачи?
#28 by Skom
у тя там больше 20 колонок я про это говорю
#29 by фобка
+ это таблица перевозок, некоторые перевозки осуществляются в два этапа. Хочу в отчете видеть что было на первом и втором этапе для одного груза в одной строке. В таблице свзяь для одной перевозки - идентификатор INTG_ORDRNM
#30 by Skom
Select    a.VIN,    b.VIN From archive_m as a Left Join (        INTG_ORDRNMB        from archive_m b            Where b.TransportType = 2       ) as b on a.INTG_ORDRNMB = b.INTG_ORDRNMB
#31 by Skom
+30 так пойдет?
#32 by Skom
только во вложенном селекте алиасы наверное надо переделать. а может и не надо. не пробовал
#33 by фобка
да, запрос отработал правильно, это нечто среднее между запросами из
#34 by упс
на вашем тестовом примере работает как надо: Select a.VIN, b.VIN  From archive_m a Left Join archive_m b On a.INTG_ORDRNMB = b.INTG_ORDRNMB and b.TransportType = 2 Where a.TransportType = 1
#35 by фобка
спасибо! видимо это как раз то, что надо :)
#36 by Skom
жалко Sadovnikov'a "ушли" с мисты. он бы вам всем показал как надо.))
#37 by ДенисЧ
Он сам ушёл.
#38 by Skom
я знаю. а так же и причины тоже. я же и нгаписал слово ушли в кавычках
#39 by Ёпрст
ээ.. и давно ? И с какой ветки ? А то не было миня тут..
#40 by Skom
у меня в профиле аська есть. ты туда вопрос задай))) я тут не буду писать
#41 by Ёпрст
нету аськи
#42 by Skom
в общем он больше на мисту не ходок. а ты не заметил что его давно давно нету на форуме
#43 by Skom
примерно с августа он сюда не ходит
#44 by Ёпрст
да вроде был.. хз.
#45 by bahmet
нужна группировка по полю + суммирование строки по другому полю??? или у вас всегда максимум две строки с одинаковым INTG_ORDRNMB ?
#46 by Skom
ну может не с августа но с сентября точно
#47 by фобка
это не совсем группировка и суммирования нет, максимум две строки :) как писал выше, уже помогли "заджойнить", спасибо =) всё будет хорошо
#48 by orefkov
|Select a.VIN, b.VIN  From archive_m a |inner Join archive_m b On a.INTG_ORDRNMB = b.INTG_ORDRNMB and a.TransportType <> b.TransportType
#49 by фобка
к сожалению нет. Иннер джоин - выдает 0 записей, лефт джоин - большое кол-во записей (видимо, потому что в таблице есть много записей с пустым INTG_ORDRNMB, для них и TransportType тоже пустой). Ну и пока непонятно как поведет себя запрос если в дальнейшем в базу буду добавлять что-то типа TransportType = 3..
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С