![]() |
![]() |
![]() |
|
SQL как "заджойнить" одну таблицу | ☑ | ||
---|---|---|---|---|
0
фобка
25.11.10
✎
09:19
|
Привет
Пишу запрос: |Select a.VIN, b.VIN From archive_m a |Left Join archive_m b On a.INTG_ORDRNMB = b.INTG_ORDRNMB |Where a.TransportType = 1 and b.TransportType = 2 В таблице нет записей с TransportType = 2, то есть на выходе в теории должно быть две колонки в правом NULL. Но результат выполнения запроса в этом случае вообще ноль записей. Пробую написать кривее: |Select a.VIN, b.VIN From |(Select VIN,INTG_ORDRNMB from archive_m Where TransportType = 1) a |Left Join |(Select VIN,INTG_ORDRNMB from archive_m Where TransportType = 2) b |On a.INTG_ORDRNMB = b.INTG_ORDRNMB результат какой нужно, но смущает сам запрос. Почему не отрабатывает первый запрос? |
|||
1
Ненавижу 1С
гуру
25.11.10
✎
09:20
|
(0) плохо теорию читал
условие ставить надо тогда не в WHERE, а в ON |
|||
2
фобка
25.11.10
✎
09:24
|
(1)
|Select a.VIN, b.VIN From archive_m a |Left Join archive_m b On a.INTG_ORDRNMB = b.INTG_ORDRNMB |And a.TransportType = 1 and b.TransportType = 2 Так? Результат не правильный, оч. много записей на выходе, даже не знаю, что это за связь |
|||
3
Ненавижу 1С
гуру
25.11.10
✎
09:25
|
(2) сам себе сформулируй что ты хочешь получить в результате
|
|||
4
antoneus
25.11.10
✎
09:27
|
inner join попробуй
|
|||
5
Skom
25.11.10
✎
09:28
|
(0) я че та не вкурил
From archive_m Join archive_m НАКУЯ??? |
|||
6
Skom
25.11.10
✎
09:28
|
ты чего получить то пытаешься???
|
|||
7
фобка
25.11.10
✎
09:29
|
(3) сформулировал, в таблице существуют две или одна запись с одинаковым идентификатором (INTG_ORDRNMB), и разными (TransportType). На выходе хочу иметь одну запись для одного идентификатора с разными значениями других полей.
Второй запрос отработал правильно, но смущает само написание, и думаю что отрабатывать он будет дольше |
|||
8
Skom
25.11.10
✎
09:30
|
из хелпы
Поиск дублирующихся элементов Выберем все элементы справочника Контрагенты, у которых совпадают ИНН ТекстЗапроса = " |SELECT | Спр.ID [Элемент $Справочник.Контрагенты], | $Спр.ИНН ИНН |FROM | $Справочник.Контрагенты Спр |WHERE | $Спр.ИНН IN | (SELECT | $Спр1.ИНН | FROM | $Справочник.Контрагенты Спр1 | WHERE | $Спр1.ИНН <> ‘’ | GROUP BY | $Спр1.ИНН | HAVING | COUNT(*) > 1) |ORDER BY | $Спр.ИНН"; |
|||
9
фобка
25.11.10
✎
09:30
|
(4) мне нужны все записи из левой и совпадающие из правой
|
|||
10
Ёпрст
гуру
25.11.10
✎
09:31
|
(0)
or |
|||
11
фобка
25.11.10
✎
09:31
|
(8) мне дубли не нужны, мне нужно все в одну "строку" сложить
|
|||
12
фобка
25.11.10
✎
09:32
|
(10) к сожалению нет, в правой теперь вместо Null все значения из левой
|
|||
13
Ёпрст
гуру
25.11.10
✎
09:33
|
(7) используй count и having в условии к 1 табличке и привет, и не надо джойнить ничего
|
|||
14
el-gamberro
25.11.10
✎
09:35
|
union all
|
|||
15
kroll
25.11.10
✎
09:36
|
Смотри, убираем из первоначального запроса 1 условия (and b.TransportType = 2)
|Select a.VIN, b.VIN From archive_m a |Left Join archive_m b On a.INTG_ORDRNMB = b.INTG_ORDRNMB |Where a.TransportType = 1 получается таблица на выходе. В колонке b.vin по твоему утверждению нет значений TransportType = 2. Так А теперь добавляем условие and b.TransportType = 2 (получаем первоначальный текст запроса). Ессно не будет ничего на выходе... Ты же говоришь своим запросом - показать строки, для которых b.TransportType = 2 Понятно хоть разъяснил? |
|||
16
фобка
25.11.10
✎
09:36
|
(13) ок, ща почитаю
(14) юнион даст две записи |
|||
17
el-gamberro
25.11.10
✎
09:37
|
16 0_о какие 2 записи???
|
|||
18
Ёпрст
гуру
25.11.10
✎
09:37
|
(16) можешь не читать..@Skom тебе готовый код дал.
|
|||
19
фобка
25.11.10
✎
09:41
|
(17)
таблица VIN INTG_ORDRNMB TransportType a1 1 1 a2 2 1 a1 1 2 на выходе с юнионом будет VIN a1 a2 a1 нужно a.VIN b.VIN a1 a1 a2 Null |
|||
20
упс
25.11.10
✎
09:43
|
(0) Добавьте условие OR b.TransportType IS NULL к своему первоначальному запросу. Т.е. Where a.TransportType = 1 and (b.TransportType = 2 OR b.TransportType IS NULL).
|
|||
21
Ёпрст
гуру
25.11.10
✎
09:43
|
|Select max(VIN) From archive_m
|Where TransportType = 1 or TransportType = 2 |Group by INTG_ORDRNM |HAVING COUNT(*) > 1 |
|||
22
упс
25.11.10
✎
09:44
|
(20) гоню
|
|||
23
фобка
25.11.10
✎
09:50
|
(21) ну, ребят..мне не нужна группировка. мне нужны будут еще остальные значения (там колонок больше 20) для обоих записей, но только в одной строке..
перекур |
|||
24
Skom
25.11.10
✎
09:50
|
жесть.))
|
|||
25
Skom
25.11.10
✎
09:51
|
+23 ты давай тогда полностью что те надо. а то.....
|
|||
26
Grusswelle
25.11.10
✎
09:53
|
(0) Оришинальный ход мысли, правда-правда!
|
|||
27
фобка
25.11.10
✎
09:58
|
(15) видимо так и отрабатывает, алиясы игнорируются
(25) так вроде всё расписал, скрин приложить? :) или разъяснить реальный смысл задачи? |
|||
28
Skom
25.11.10
✎
10:00
|
у тя там больше 20 колонок
я про это говорю |
|||
29
фобка
25.11.10
✎
10:01
|
+ (27) это таблица перевозок, некоторые перевозки осуществляются в два этапа. Хочу в отчете видеть что было на первом и втором этапе для одного груза в одной строке. В таблице свзяь для одной перевозки - идентификатор INTG_ORDRNM
|
|||
30
Skom
25.11.10
✎
10:03
|
Select
a.VIN, b.VIN From archive_m as a Left Join ( Select b.VIN, INTG_ORDRNMB from archive_m b Where b.TransportType = 2 ) as b on a.INTG_ORDRNMB = b.INTG_ORDRNMB Where a.TransportType = 1 |
|||
31
Skom
25.11.10
✎
10:04
|
+30 так пойдет?
|
|||
32
Skom
25.11.10
✎
10:05
|
только во вложенном селекте алиасы наверное надо переделать. а может и не надо. не пробовал
|
|||
33
фобка
25.11.10
✎
10:06
|
(31) да, запрос отработал правильно, это нечто среднее между запросами из (0)
|
|||
34
упс
25.11.10
✎
10:08
|
(19) на вашем тестовом примере работает как надо:
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
фобка
25.11.10
✎
10:11
|
(34) спасибо! видимо это как раз то, что надо :)
|
|||
36
Skom
25.11.10
✎
10:12
|
жалко Sadovnikov'a "ушли" с мисты. он бы вам всем показал как надо.))
|
|||
37
ДенисЧ
25.11.10
✎
10:12
|
(36) Он сам ушёл.
|
|||
38
Skom
25.11.10
✎
10:13
|
(37) я знаю. а так же и причины тоже.
я же и нгаписал слово ушли в кавычках |
|||
39
Ёпрст
гуру
25.11.10
✎
10:20
|
(38) ээ.. и давно ?
И с какой ветки ? А то не было миня тут.. |
|||
40
Skom
25.11.10
✎
10:21
|
у меня в профиле аська есть. ты туда вопрос задай))) я тут не буду писать
|
|||
41
Ёпрст
гуру
25.11.10
✎
10:23
|
(40) нету аськи
|
|||
42
Skom
25.11.10
✎
10:27
|
в общем он больше на мисту не ходок.
а ты не заметил что его давно давно нету на форуме |
|||
43
Skom
25.11.10
✎
10:31
|
примерно с августа он сюда не ходит
|
|||
44
Ёпрст
гуру
25.11.10
✎
10:33
|
(43) да вроде был..
хз. |
|||
45
bahmet
25.11.10
✎
10:34
|
(35)нужна группировка по полю + суммирование строки по другому полю??? или у вас всегда максимум две строки с одинаковым INTG_ORDRNMB ?
|
|||
46
Skom
25.11.10
✎
10:38
|
(44) ну может не с августа но с сентября точно
|
|||
47
фобка
25.11.10
✎
10:41
|
(45) это не совсем группировка и суммирования нет, максимум две строки :)
как писал выше, уже помогли "заджойнить", спасибо =) всё будет хорошо |
|||
48
orefkov
25.11.10
✎
11:00
|
(7)
|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
фобка
25.11.10
✎
12:07
|
(48) к сожалению нет. Иннер джоин - выдает 0 записей, лефт джоин - большое кол-во записей (видимо, потому что в таблице есть много записей с пустым INTG_ORDRNMB, для них и TransportType тоже пустой). Ну и пока непонятно как поведет себя запрос если в дальнейшем в базу буду добавлять что-то типа TransportType = 3..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |