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

Откуда:
Сообщений: 16
MS SQL 2012
Необходимо разбить существующую таблицу с данными на две и связать по ключевым полям.
Делал это несколькими способами:
1. Создавал таблицу в существующей БД вручную соответственно типы полей совпадают
и затем
INSERT INTO Table2 (a1,a2,a3,a4)
SELECT DISTINCT a1,a2,a3,a4
FROM Table1
WHERE Table1.a1 IS NOT NULL

2.
SELECT DISTINCT a1,a2,a3,a4
INTO Table2
from Table1

затем

UPDATE Table1
SET Table1.ID_a=Table2.ID_a
FROM Book JOIN Table2
ON (Table1.[a1] = Table2.[a1]) AND (Table1.[a2] = Table2.[a2])
AND (Table1.[a3] = Table2.[a3]) AND (Table1.[a4] = Table2.[a4])


Проблема в том, что если после ON только два сравнения (Table1.[a1] = Table2.[a1]) AND (Table1.[a2] = Table2.[a2]), всё ок всем записям соотвествуют ID, а если четыре то не всем.. в чём может быть косяк? Значения с пробелами, но на сколько я знаю пробелы при сравнении в начале и в конце не учитываются, это даже если они обрезаются при переносе... Пробовал без DISTINCT тоже самое
11 июл 18, 09:32    [21561276]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь разбитие таблицы на две с последующим присвоением id  [new]
linker_2004
Member

Откуда:
Сообщений: 16
забыл написать.. значения есть и NULL.. при сравнении значения некоторых полей встречается NULL, возвращается false и соответственно id не присваивается.. бред?
11 июл 18, 09:41    [21561301]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь разбитие таблицы на две с последующим присвоением id  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
linker_2004,

NULL в значениях, collation полей
11 июл 18, 09:41    [21561303]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь разбитие таблицы на две с последующим присвоением id  [new]
aleks222
Member

Откуда:
Сообщений: 952
UPDATE Table1
SET Table1.ID_a=Table2.ID_a
FROM Book JOIN Table2
ON (Table1.[a1] = Table2.[a1]) AND (Table1.[a2] = Table2.[a2])
AND exists( select Table1.[a3], Table1.[a4] intersect select Table2.[a3], Table2.[a4] )
11 июл 18, 09:59    [21561379]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь разбитие таблицы на две с последующим присвоением id  [new]
iiyama
Member

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

Может сделать проще, сделать копию таблицы
select ... INTO CopyTable1 FROM Table1

а потом удалить часть данных из первой и другую часть из второй ?
11 июл 18, 10:23    [21561420]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь разбитие таблицы на две с последующим присвоением id  [new]
linker_2004
Member

Откуда:
Сообщений: 16
Спасибо всем кто откликнулся
aleks222
UPDATE Table1
SET Table1.ID_a=Table2.ID_a
FROM Book JOIN Table2
ON (Table1.[a1] = Table2.[a1]) AND (Table1.[a2] = Table2.[a2])
AND exists( select Table1.[a3], Table1.[a4] intersect select Table2.[a3], Table2.[a4] )

красивый вариант, решил так и сделать не всё понял но буду разбираться с intersect в подзапросе ) Спасибо
11 июл 18, 11:02    [21561516]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь разбитие таблицы на две с последующим присвоением id  [new]
linker_2004
Member

Откуда:
Сообщений: 16
iiyama, думал и так.. можно было бы и NULL в значениях победить на время заполнив массив тем же 0..
11 июл 18, 11:05    [21561520]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь разбитие таблицы на две с последующим присвоением id  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
Перед Update'ом:
SET ANSI_NULLS Off
12 июл 18, 05:23    [21564660]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить