Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение таблиц по подстроке / 16 сообщений из 16, страница 1 из 1
07.12.2017, 11:06:41
    #39565636
Ninti_Niom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
Добрый день

Необходимо объединить две таблицы по столбцам в одном из которых есть префикс документа, т.е в одной таблице в поле стоят цифры, а в другой префикс + эти же цифры
подскажите, как это можно сделать ?
...
Рейтинг: 0 / 0
07.12.2017, 11:22:53
    #39565655
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
...
Рейтинг: 0 / 0
07.12.2017, 11:29:27
    #39565665
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
Ninti_NiomДобрый день

Необходимо объединить две таблицы по столбцам в одном из которых есть префикс документа, т.е в одной таблице в поле стоят цифры, а в другой префикс + эти же цифры
подскажите, как это можно сделать ?
Слишком абстрактный вопрос - данные для примера есть?
Если префикс заранее не известен
1. SUBSTRING( [haystack], pos, len ) = [needle] - индексы по haystack работать не будут
2. [haystack] LIKE '%' + [needle] - будут работать индексы по haystack
Если известен алгоритм формирования [haystack]
3. [haystack] = func( [prefix], [needle] )
Если неизвестен алгоритм формирования
4. [haystack] LIKE '%' + [prefix] + '%' + [needle]
И т.д. и т.п.
Общая идея - использовать LIKE, PATINDEX, а не SUBSTRING/LEFT/RIGHT
...
Рейтинг: 0 / 0
07.12.2017, 11:36:05
    #39565679
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
Да ладно ты развел теорию.
тут наверно студенту курсовой надо сдать.
А ты ему про индексы.
...
Рейтинг: 0 / 0
07.12.2017, 11:41:51
    #39565686
Cammomile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
У т2 можно сделать еще одно поле, где будут только префиксы, и соединять Т1.Префикс = Т2.Префикс

Если по условиям задачи т2 нельзя альтерить, то можно начитать ключи (айдишники я надеюсь) т2 во временную таблицу, и уже там сделать поле с префиксом.

Тогда будет
ФРОМ

ДЖОЙН Т1 ОН т1.Префикс = #Т.Префикс
ДЖОЙН Т2 ОН т2.ИД = #Т.ИД
...
Рейтинг: 0 / 0
07.12.2017, 11:44:27
    #39565688
Ninti_Niom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
982183,
Руслан Дамирович,
префиксы известны
в упрощенном варианте, то что нужно:
1 табл 2 табл
ROSY KGITEM KGCO
5811 PC5811 58020510
5811 PC5811 58020510
5812 PC5812 58020321
5812 PC5812 58020321
5813 RS5813 58020322
5813 RS5813 58020322

SELECT ROSY, KGITEM, KGCO
FROM F1
LEFT JOIN F2 ON F1.ROSY = F2.****substring(KGITEM, 3, 4)?
WHERE ROCO = 001

есть и другой вариант - дописать префикс в 1 таблицу и так вытаксивать
...
Рейтинг: 0 / 0
07.12.2017, 11:59:59
    #39565711
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
Ninti_NiomF2.****substring(KGITEM, 3, 4)?

substring(F2.KGITEM, 3, 4)
...
Рейтинг: 0 / 0
07.12.2017, 12:01:28
    #39565712
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
А ты точно уверен, что тебе нужен LEFT JOIN?
...
Рейтинг: 0 / 0
07.12.2017, 12:18:30
    #39565734
Ninti_Niom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
982183А ты точно уверен, что тебе нужен LEFT JOIN?
достать значения из второй таблицы - все данные из первой + то, что подпадает под условие из второй -
разве не left join?

не сработала конструкция по замене значений в столбце
update F1
set ROSY = CONCAT('PC', ROSY)
WHERE ROCO = 001

тип данных и размерность совпадают..

а в join-е по substr добавляет столбцы с null значениями
...
Рейтинг: 0 / 0
07.12.2017, 12:24:15
    #39565740
Ninti_Niom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
спасибо вам большое,
еще перечитаю ссылки

SELECT ROSY, KGITEM, KGCO
FROM F1
LEFT JOIN F2 ON concat('PC', F1.ROSY) = F2.KGITEM
WHERE ROCO = 001

получилось вот так вытащить
...
Рейтинг: 0 / 0
07.12.2017, 12:37:42
    #39565752
Cammomile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
Ninti_Niom, плохой код, нельзя джойнить на результаты скаляров.

Сделай временную развязочную таблицу.
...
Рейтинг: 0 / 0
07.12.2017, 14:24:36
    #39565878
Ninti_Niom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
CammomileNinti_Niom, плохой код, нельзя джойнить на результаты скаляров.

Сделай временную развязочную таблицу.
была использована промежуточная таблица
спасибо
...
Рейтинг: 0 / 0
07.12.2017, 14:52:53
    #39565910
Cammomile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
С фу-й в условии соединения ты гарантированно не попадаешь в индекс, если он есть.
...
Рейтинг: 0 / 0
07.12.2017, 15:03:55
    #39565924
Ninti_Niom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
Cammomile, хм.. одна таблица вообще без ключей была...
а условие более жесткое было
радует что единичная надобность
...
Рейтинг: 0 / 0
07.12.2017, 15:05:41
    #39565926
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
982183Да ладно ты развел теорию.
тут наверно студенту курсовой надо сдать.
А ты ему про индексы.

Да, сейчас время обострения
...
Рейтинг: 0 / 0
08.12.2017, 05:41:51
    #39566353
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц по подстроке
Если не указано иное, то этот вариант надо считать "по умолчанию".
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение таблиц по подстроке / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]