|
|
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
Добрый день Необходимо объединить две таблицы по столбцам в одном из которых есть префикс документа, т.е в одной таблице в поле стоят цифры, а в другой префикс + эти же цифры подскажите, как это можно сделать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 11:06:41 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
https://msdn.microsoft.com/ru-ru/library/ms187748(v=sql.120).aspx SUBSTRING ( expression ,start , length ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 11:22:53 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 11:29:27 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
Да ладно ты развел теорию. тут наверно студенту курсовой надо сдать. А ты ему про индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 11:36:05 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
У т2 можно сделать еще одно поле, где будут только префиксы, и соединять Т1.Префикс = Т2.Префикс Если по условиям задачи т2 нельзя альтерить, то можно начитать ключи (айдишники я надеюсь) т2 во временную таблицу, и уже там сделать поле с префиксом. Тогда будет ФРОМ #Т ДЖОЙН Т1 ОН т1.Префикс = #Т.Префикс ДЖОЙН Т2 ОН т2.ИД = #Т.ИД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 11:41:51 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
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 таблицу и так вытаксивать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 11:44:27 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
Ninti_NiomF2.****substring(KGITEM, 3, 4)? substring(F2.KGITEM, 3, 4) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 11:59:59 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
А ты точно уверен, что тебе нужен LEFT JOIN? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 12:01:28 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
982183А ты точно уверен, что тебе нужен LEFT JOIN? достать значения из второй таблицы - все данные из первой + то, что подпадает под условие из второй - разве не left join? не сработала конструкция по замене значений в столбце update F1 set ROSY = CONCAT('PC', ROSY) WHERE ROCO = 001 тип данных и размерность совпадают.. а в join-е по substr добавляет столбцы с null значениями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 12:18:30 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
спасибо вам большое, еще перечитаю ссылки SELECT ROSY, KGITEM, KGCO FROM F1 LEFT JOIN F2 ON concat('PC', F1.ROSY) = F2.KGITEM WHERE ROCO = 001 получилось вот так вытащить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 12:24:15 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
Ninti_Niom, плохой код, нельзя джойнить на результаты скаляров. Сделай временную развязочную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 12:37:42 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
CammomileNinti_Niom, плохой код, нельзя джойнить на результаты скаляров. Сделай временную развязочную таблицу. была использована промежуточная таблица спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 14:24:36 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
С фу-й в условии соединения ты гарантированно не попадаешь в индекс, если он есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 14:52:53 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
Cammomile, хм.. одна таблица вообще без ключей была... а условие более жесткое было радует что единичная надобность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 15:03:55 |
|
||
|
Объединение таблиц по подстроке
|
|||
|---|---|---|---|
|
#18+
982183Да ладно ты развел теорию. тут наверно студенту курсовой надо сдать. А ты ему про индексы. Да, сейчас время обострения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 15:05:41 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39565636&tid=1690722]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 208ms |
| total: | 471ms |

| 0 / 0 |
