Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите создать запрос  [new]
Rudge
Member

Откуда:
Сообщений: 274
Добрый день

Есть 2 таблицы table1 и table2.
Нужно заполнить столбец column1 таблицы table1 значениями столбца column2 таблицы table2. Значения брать по условию column1_1 таблицы table1 LIKE column2_2 таблицы table2.
По одному получается, а как сделать чтобы автоматом по всем?
22 дек 11, 10:59    [11807415]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Rudge
а как сделать чтобы автоматом по всем?

Написать в UPDATE соединение двух таблиц ?
22 дек 11, 11:01    [11807426]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Rudge,
table1.column1_1 LIKE table2.column2_2
допускает существование нескольких column2_2 для одного column1_1.
Каким же значением собираетесь апдейтить?
22 дек 11, 11:03    [11807446]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Rudge
Member

Откуда:
Сообщений: 274
Короче нужно нужно поле id_kontr из таблицы контрагентов вбить в соответсвующее поле id_kontr в таблицу договоров. В Обоих таблицах есть поле НаименованиеКонтрагента, по нему и определять, но не факт что они совпадают по равенству, поэтому предлагаю использовать like.
22 дек 11, 11:19    [11807575]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Rudge
Короче нужно нужно поле id_kontr из таблицы контрагентов вбить в соответсвующее поле id_kontr в таблицу договоров. В Обоих таблицах есть поле НаименованиеКонтрагента, по нему и определять, но не факт что они совпадают по равенству, поэтому предлагаю использовать like.
Ну вот вас и спрашивают: Что будете делать, если по like найдутся несколько контрагентов?
22 дек 11, 11:35    [11807697]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Rudge
Короче нужно нужно поле id_kontr из таблицы контрагентов вбить в соответсвующее поле id_kontr в таблицу договоров. В Обоих таблицах есть поле НаименованиеКонтрагента, по нему и определять, но не факт что они совпадают по равенству, поэтому предлагаю использовать like.
Не совсем понял.
Чтобы LIKE работал не так, как простое =,
надо использовать шаблон (PATTERN) со специальными символами (WILDCARDS: %_[]-^).
Я полагал, что table2.column2_2 как раз и содержит какие-то хитрые шаблоны.
Разве это не так? Тогда я ничего не понимаю!
22 дек 11, 11:41    [11807764]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Rudge
Member

Откуда:
Сообщений: 274
Ну допустим в таблице договоров в записи НаименованиеКонтрагента идёт как "Профит", а в таблице контрагентов идёт как "ООО Профит Консалт". Мне надо id-шник этого "ООО Профит Консалт" подставить в таблицу договоров.
Если по LIKE найдутся несколько контрагентов, то пусть берется любой(первый например).
22 дек 11, 12:15    [11808091]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Rudge,

что, по-Вашему, вернёт условие 'Профит' LIKE 'ООО Профит Консалт'?
Для начала надо определиться, как связаны две таблицы.
22 дек 11, 12:18    [11808130]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Rudge
Ну допустим в таблице договоров в записи НаименованиеКонтрагента идёт как "Профит", а в таблице контрагентов идёт как "ООО Профит Консалт".
А если наоборот?
22 дек 11, 12:18    [11808132]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Rudge
Member

Откуда:
Сообщений: 274
...LIKE '%Профит%'...
Мне просто напросто дали 2 excel-файла с контрагентами и договорами. Они связаны только полем НаименованиеКонтрагента.
По идее в таблице контрагентов идёт более полное название, чем в таблице договоров. Если будет наоборот то пофиг на такие записи, игнорим их, пусть тогда их потом вручную забивают.
22 дек 11, 12:30    [11808273]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Rudge,

пришло время назвать, наконец, версию сервера
22 дек 11, 12:33    [11808316]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Rudge
Member

Откуда:
Сообщений: 274
Select @@version:
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)   Jul  9 2008 14:43:34   Copyright (c) 1988-2008 Microsoft Corporation  Enterprise Edition on Windows NT 6.0 <X86> (Build 6002: Service Pack 2) 
22 дек 11, 12:42    [11808403]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Rudge
Member

Откуда:
Сообщений: 274
Пробую так:

use base1
update dbo.table1 t1
LEFT JOIN base2.dbo.table2 t2 ON t1.ContragentName = t2.ContragentName
set t1.IdContragent = t2.IdContragent


Пишет:
Incorrect syntax near 't1'.


Хотя так запрос обрабатывается:

use base1
select * from dbo.table1 t1
LEFT JOIN base2.dbo.table2 t2 ON t1.ContragentName = t2.ContragentName


Взял за основу запрос отсюда https://www.sql.ru/forum/actualthread.aspx?tid=798296
22 дек 11, 14:21    [11809350]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Rudge
Взял за основу запрос отсюда https://www.sql.ru/forum/actualthread.aspx?tid=798296

А чего не Cache какой нибудь ?
Взять за основу какой нибудь пример UPDATE из хелпа MSSQL что не позволяет ?
22 дек 11, 14:26    [11809388]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Rudge
Select @@version:
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)   Jul  9 2008 14:43:34   Copyright (c) 1988-2008 Microsoft Corporation  Enterprise Edition on Windows NT 6.0 <X86> (Build 6002: Service Pack 2) 
UPDATE t1
SET t1.column1=t2.column2
FROM table1 t1
CROSS APPLY (SELECT TOP(1) * FROM table2 t2 WHERE t2.column2_2 LIKE '%'+t1.column1_1+'%') t2;
Как-то так?
Насчёт LIKE не уверен - совсем меня с ним запутали!
Поле в первой таблице содержится в поле второй или наоборот???
В случае чего поменяйте местами
22 дек 11, 14:43    [11809551]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Rudge
Member

Откуда:
Сообщений: 274
Спасибо Glory, глянул сюда http://msdn.microsoft.com/ru-ru/library/ms177523.aspx , Использование инструкции UPDATE с данными из другой таблицы.

Сделал так:

use base1
go
update table1
set IdContragent = t2.idcontragent
from table1 t1 left join base2.dbo.table2 t2 on t1.ContragentName = t2.ContragentName
go



Спасибо iap, Ваш запрос пока надо немного раскурить. Отпишусь о результатах
22 дек 11, 14:57    [11809672]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Rudge
Member

Откуда:
Сообщений: 274
А вот как действовать если в одной таблице КонтрагентНаименование идет ,например, ООО Ростэк, а во второй - ООО "Ростэк"?
22 дек 11, 15:04    [11809707]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
icprog
Member

Откуда:
Сообщений: 166
Rudge,

а если добавить replace(ContragentName, '"', '') и сравнивать как бы без кавычек?
22 дек 11, 16:27    [11810426]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Rudge
Member

Откуда:
Сообщений: 274
Мда, результаты такого запроса неудовлетворительны. Всё потому, что названия контрагентов в двух таблицах сильно разнятся и простым like %contragentname% проблему не решить.
Как лучше действовать в такой ситуации, чтоб максимально установить соответствие?
23 дек 11, 10:10    [11812974]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать запрос  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
Rudge
Мда, результаты такого запроса неудовлетворительны. Всё потому, что названия контрагентов в двух таблицах сильно разнятся и простым like %contragentname% проблему не решить.
Как лучше действовать в такой ситуации, чтоб максимально установить соответствие?


Вручную сделать.
или
Смотреть в сторону нечеткого поиска.
23 дек 11, 11:18    [11813409]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить