powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение таблиц по подстроке
16 сообщений из 16, страница 1 из 1
Объединение таблиц по подстроке
    #39565636
Ninti_Niom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день

Необходимо объединить две таблицы по столбцам в одном из которых есть префикс документа, т.е в одной таблице в поле стоят цифры, а в другой префикс + эти же цифры
подскажите, как это можно сделать ?
...
Рейтинг: 0 / 0
Объединение таблиц по подстроке
    #39565655
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Объединение таблиц по подстроке
    #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
Объединение таблиц по подстроке
    #39565679
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ладно ты развел теорию.
тут наверно студенту курсовой надо сдать.
А ты ему про индексы.
...
Рейтинг: 0 / 0
Объединение таблиц по подстроке
    #39565686
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У т2 можно сделать еще одно поле, где будут только префиксы, и соединять Т1.Префикс = Т2.Префикс

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

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

ДЖОЙН Т1 ОН т1.Префикс = #Т.Префикс
ДЖОЙН Т2 ОН т2.ИД = #Т.ИД
...
Рейтинг: 0 / 0
Объединение таблиц по подстроке
    #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
Объединение таблиц по подстроке
    #39565711
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ninti_NiomF2.****substring(KGITEM, 3, 4)?

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

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

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

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

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

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

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

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

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


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