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

Откуда:
Сообщений: 55
Здравствуйте !

Имеется 2 таблицы: #Table1 , Table2

Поля:

#Table1: Field1, Field2, Field3, Field4

Table2: Field1, Field2, Field3, Field4, Field5

Требуется:

Если #Table1.Field2 = Table2.Field5, то #Table1.Field3 (присвоить) Table2.Field4
Если запись из #Table1.Field2 не удалось найти в Table2.Field5 , то мы добавляем новую запись в Table2 и из новой записи (только что добавленной) берем Field5 и присваиваем в #table1.Field2 ...

Итак надо проделать от начала до конца первой таблицы (1 таблица 100 записей, 2 таблица 1000)

Как это выполнить, на коленях прошу вашей помощи.
20 ноя 13, 15:58    [15162827]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
SonyPictures
Как это выполнить, на коленях прошу вашей помощи.

Читать в хелпе про команду MERGE
20 ноя 13, 16:00    [15162847]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Glory
SonyPictures
Как это выполнить, на коленях прошу вашей помощи.

Читать в хелпе про команду MERGE


У меня 2005 MS SQL (Забыл упомянуть), а MERGE вроде в 2008 был только введен.
20 ноя 13, 16:04    [15162890]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Тогда используйте команды UPDATE и INSERT
20 ноя 13, 16:17    [15163007]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Правильно ли будет такое выполнение ?

IF Exists (SELECT Field2 FROM #Table1 WHERE #Table1.Field2=Table2.Field5)
Update #Table1
SET #Table1.Field3 = Table2.Field4


И будет ли для второго варианта (если нет записи IF NOT EXISTS) логичен эдентичный запрос только вместо UPDATE будет INSERT
20 ноя 13, 17:20    [15163507]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
o-o
Guest
SonyPictures,

Update #Table1
SET Field3 = t2.Field4
from Table2 t2 join #Table1 t1 on t1.Field2 = t2.Field5


эдентичный -> идентичный
20 ноя 13, 17:32    [15163602]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
o-o
SonyPictures,

Update #Table1
SET Field3 = t2.Field4
from Table2 t2 join #Table1 t1 on t1.Field2 = t2.Field5


эдентичный -> идентичный


Глупая ошибка ... спасибо, что исправили :)

А то что вы написали по сути тоже самое сделает , что и я имел ввиду ? и как это реализовать с Insert (если не трудно или не лень, объясните)
20 ноя 13, 17:42    [15163658]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
o-o
Guest
да вроде то:

if object_id('tempdb..#Table1') is not null drop table #Table1;
create table #Table1 (Field2 int, Field3 int);

if object_id('Table2') is not null drop table Table2;
create table Table2 (Field4 int, Field5 int);

insert into #Table1 values(1, 1), (2, 2);
insert into Table2 values(10, 1), (30, 3);

select *
from #Table1;
----------------------------
Field2	Field3
1	1
2	2

select *
from Table2;
----------------------------
Field4	Field5
10	1
30	3

update #Table1
set Field3 = t2.Field4
from Table2 t2 join #Table1 t1 on t1.Field2 = t2.Field5
          
select *
from #Table1;
----------------------------
Field2	Field3
1	10
2	2


чтобы на своих данных проверить и не обновить,
такое выполните:
begin tran
update #Table1
set Field3 = t2.Field4
from Table2 t2 join #Table1 t1 on t1.Field2 = t2.Field5
          
select *
from #Table1;
rollback


увидите конечный результат, но само обновление откатится
20 ноя 13, 17:56    [15163746]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
o-o
Guest
из второй части я вообще ничего не понимаю.
продолжая мой пример,
найдем записи из #Table1 такие, что
SonyPictures
запись из #Table1.Field2 не удалось найти в Table2.Field5


select *
from #Table1 t1
where not exists (select 1 
                  from Table2 t2
                  where t1.Field2 = t2.Field5)
----------------------------------------
Field2	Field3
2	2


далее Вы хотите такие строки вставить в Table2,
в Table2.Field5, видимо, пойдет t1.Field2, а в Field4?
+
SonyPictures
и из новой записи (только что добавленной) берем Field5 и присваиваем в #table1.Field2

приехали.
мы же оттуда (из #table1.Field2) и взяли Table2.Field5.
ерунда получается.
20 ноя 13, 18:20    [15163922]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
o-o,

Во втором случае тоже самое, что и с Update , только если записи в Table2 нет, то мы делаем INSERT , а не UPDATE
21 ноя 13, 09:19    [15166132]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Вот примерно чего хочется:

INSERT INTO Table2.Field5 (Select Field2 From #Table1 where #Table1.Field2<>Table2.Field5) 


Что-то вроде такого ...

То есть , нужно просто просмотреть нет ли в Table2.Field5 записей идентичных #Table1.Field2 и если нет таких, то вставить их в таблицу.
21 ноя 13, 11:33    [15166979]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
SonyPictures
нужно просто просмотреть нет ли в Table2.Field5 записей идентичных #Table1.Field2

Ну так напишите сначала вот этот запрос
21 ноя 13, 11:40    [15167046]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

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


Glory
SonyPictures
нужно просто просмотреть нет ли в Table2.Field5 записей идентичных #Table1.Field2

Ну так напишите сначала вот этот запрос


Простите, я бы с радостью, но я почему то когда пишу то, что мне надо увидеть ... происходит CROSS JOIN и становится очень грустно. Я бы не просил помощи, если бы смог сам ...

я не могу вообщем правильно условие построить, да я знаю - это печально
21 ноя 13, 12:09    [15167278]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
SonyPictures
Простите, я бы с радостью, но я почему то когда пишу то, что мне надо увидеть ... происходит CROSS JOIN и становится очень грустно.

Наверное потому, что вы этот CROSS JOIN и написали
21 ноя 13, 12:11    [15167287]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Glory
SonyPictures
Простите, я бы с радостью, но я почему то когда пишу то, что мне надо увидеть ... происходит CROSS JOIN и становится очень грустно.

Наверное потому, что вы этот CROSS JOIN и написали


Писал просто JOIN , второй раз вообще не писал ни чего. Оба раза провоодит CROSS JOIN.
21 ноя 13, 12:16    [15167331]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
SonyPictures
Писал просто JOIN , второй раз вообще не писал ни чего. Оба раза провоодит CROSS JOIN.

Такое впечатление, что вы думаете, что достаточно в тексте запроса указать одно ключевое слово, а все остальное сервер сделает за вас.
21 ноя 13, 12:18    [15167352]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
Такое впечатление, что вы думаете, что достаточно в тексте запроса указать одно ключевое слово, а все остальное сервер сделает за вас.


Это была бы сказка, увы.

Я пытался сделать вот так:

SELECT *
FROM Table2 INNER JOIN #Table1 on #Table1.Field2 <> Table2.Field5


Но это не правильно ...
21 ноя 13, 12:27    [15167434]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
o-o
Guest
SonyPictures,
еще раз.
получаете отсутствующие записи, см. мой последний вчерашний ответ.
могу их даже вставить в Table2,
но Вам понятно, чем заполнить все требуемые поля?
мне -- нет!
я могу только сказать, что Table2.Field5 должно быть равным #Table1.Field2,
а про остальное ничего неизвестно.
вставятся NULL-ы, а если поля не их не допускают, то Вы получите ошибку

insert into Table2(Field5)
select t1.Field2
from #Table1 t1
where not exists (select 1 
                  from Table2 t2
                  where t1.Field2 = t2.Field5)
                  
select *
from  Table2  
-------------------------
Field4	Field5
10	1
30	3
NULL	2             
21 ноя 13, 12:33    [15167494]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
o-o
SonyPictures,
еще раз.
получаете отсутствующие записи, см. мой последний вчерашний ответ.
могу их даже вставить в Table2,
но Вам понятно, чем заполнить все требуемые поля?
мне -- нет!
я могу только сказать, что Table2.Field5 должно быть равным #Table1.Field2,
а про остальное ничего неизвестно.
вставятся NULL-ы, а если поля не их не допускают, то Вы получите ошибку

insert into Table2(Field5)
select t1.Field2
from #Table1 t1
where not exists (select 1 
                  from Table2 t2
                  where t1.Field2 = t2.Field5)
                  
select *
from  Table2  
-------------------------
Field4	Field5
10	1
30	3
NULL	2             



Посмотрел, это вроде как раз то, что нужно. Кол-во вставленных записей столько , сколько и должно быть. Для остальных полей проставилось значение по умолчанию. Сейчас проверю корректность и подставлю в дальнейший запрос, если все получится, то я ваш фанат :). Благодарю.
21 ноя 13, 12:42    [15167565]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
o-o,

А как убрать лишние записи ?

Вот к примеру таблицы и данные в них:

#Table1.Field2
Example1
Example2
Example3
Example2
Example4


Table2.Field5
Example1
Example3


И надо что бы в результате вышло не это (как на данный момент выходит):

Table2.Field5
Example1
Example3
Example2
Example2
Example4


А что бы вышло:

Table2.Field5
Example1
Example3
Example2
Example4


Просто прописать DISTINCT ?
21 ноя 13, 15:46    [15169143]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
o-o
Guest
SonyPictures,

убрать повторы откуда, из результата выборки или физически из таблицы?
21 ноя 13, 15:52    [15169207]     Ответить | Цитировать Сообщить модератору
 Re: IF ELSE или что-то другое ?  [new]
SonyPictures
Member

Откуда:
Сообщений: 55
o-o
SonyPictures,

убрать повторы откуда, из результата выборки или физически из таблицы?


Спасибо большое, сам разобрался , что надо сделать :)
Спасибо за помощь с запросами!
22 ноя 13, 14:19    [15174295]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить