Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Дубликаты при выборке по union all  [new]
Теоретик
Guest
Добрый вечер!
Есть две таблицы назовем их для примера obj и subobj связанные по полю obj_id отношением 1-0..1.
Может ли при данной выборке произойти задвоение записей с одинаковым obj_id в случае паралельной записи в таблицу subobj из других сессий?

SELECT o.obj_id		            
FROM obj o	            
          LEFT JOIN
         extobj s on o.obj_id = s.obj_id
where s.subobj_id is null 	
UNION ALL
SELECT o.obj_id		            
FROM obj o	            
          INNER JOIN
         extobj s on o.obj_id = s.obj_id
27 дек 12, 20:02    [13697062]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Теоретик
Guest
Вверху вместо subobj читать как extobj.
27 дек 12, 20:04    [13697071]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
Теоретик,

может,
подымите уровень изоляции транзакции до serializable, тогда проблем не будет с этим запросом :)
27 дек 12, 20:10    [13697092]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
UNION ALL - позволит дублироваться записям, если таковые будут в обоих запросах.
UNION - не позволит.
27 дек 12, 22:03    [13697581]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
qwerty112
Guest
Winnipuh
UNION ALL - позволит дублироваться записям, если таковые будут в обоих запросах.
UNION - не позволит.

вопросик-то - перечитай, ага ...
27 дек 12, 22:04    [13697586]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
qwerty112
Winnipuh
UNION ALL - позволит дублироваться записям, если таковые будут в обоих запросах.
UNION - не позволит.

вопросик-то - перечитай, ага ...


перечитал,

Может ли при данной выборке произойти задвоение записей с одинаковым obj_id в


что не так?
27 дек 12, 22:07    [13697593]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
qwerty112
Guest
Winnipuh
qwerty112
пропущено...

вопросик-то - перечитай, ага ...


перечитал,

Может ли при данной выборке произойти задвоение записей с одинаковым obj_id в


что не так?

ну и какой у тебя ответ в формулировке "при данной выборке"
т.е. автор специально уточняет, что выборку переписывать ему не нужно (он против изменения UNION ALL на UNION), понимаеш ?
27 дек 12, 22:13    [13697618]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Теоретик,

Вопрос то, небось с собеседования...
27 дек 12, 22:14    [13697624]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
qwerty112,

Упоминание паралельной записи в другой сессии в этой задаче - отвлекающий фактор.
27 дек 12, 22:16    [13697639]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
qwerty112
Winnipuh
пропущено...


перечитал,

Может ли при данной выборке произойти задвоение записей с одинаковым obj_id в


что не так?

ну и какой у тебя ответ в формулировке "при данной выборке"
т.е. автор специально уточняет, что выборку переписывать ему не нужно (он против изменения UNION ALL на UNION), понимаеш ?


спасиба пажалуста
27 дек 12, 22:16    [13697640]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Теоретик
Guest
praklin
Вопрос то, небось с собеседования...

Да нет - просто поиск ошибки в скрипте, из за которой при вставке возникает ситуация с дублированием записей участвующих в формировании уникального ключа.
Для примера пришлось сильно упростить сам скрипт - в реальной выборке кроме ключевого поля выбирается еще ряд полей, причем значения некоторых из них уникальны для каждого объединения, замена union all на union ничего не даст.
Сам скрипт достаточно большой и затрагивающий много таблиц, поэтому поднимать уровень изоляции до serializable не хотелось бы.
Какие еще варианты решения?
27 дек 12, 23:13    [13697862]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Теоретик,

От подобных коллизий спасет RCSI.
28 дек 12, 00:13    [13698021]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
super-code
Member

Откуда:
Сообщений: 244
Теоретик,

select distinct obj_id from
(
SELECT o.obj_id		            
FROM obj o	            
          LEFT JOIN
         extobj s on o.obj_id = s.obj_id
where s.subobj_id is null 	
UNION ALL
SELECT o.obj_id		            
FROM obj o	            
          INNER JOIN
         extobj s on o.obj_id = s.obj_id
) t1
28 дек 12, 10:52    [13699176]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
super-code,

а просто убрать слово "ALL" не проще?
DISTINCT зачем?
28 дек 12, 10:55    [13699192]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Гость333
Member

Откуда:
Сообщений: 3683
pkarklin
Упоминание паралельной записи в другой сессии в этой задаче - отвлекающий фактор.

Вы имеете в виду, что дубли в запросе могут появиться и без параллельно выполняющихся DML-запросов? Или что-то другое?
28 дек 12, 11:15    [13699357]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Гость333
Вы имеете в виду, что дубли в запросе могут появиться и без параллельно выполняющихся DML-запросов? Или что-то другое?


Да.
28 дек 12, 11:34    [13699514]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Гость333
Member

Откуда:
Сообщений: 3683
pkarklin
Гость333
Вы имеете в виду, что дубли в запросе могут появиться и без параллельно выполняющихся DML-запросов? Или что-то другое?

Да.

Можно какой-нибудь пример, если несложно?
28 дек 12, 11:41    [13699565]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Гость333
pkarklin
пропущено...

Да.

Можно какой-нибудь пример, если несложно?


Был не прав. Невнимательно прочитал условие в первом запросе.
28 дек 12, 12:51    [13700081]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Теоретик
Guest
super-code,

Написал же:
Теоретик
выбирается еще ряд полей, причем значения некоторых из них уникальны для каждого объединения, замена union all на union ничего не даст

В select кроме o.obj_id, ............ еще ряд полей, часть вычисляемые и ряд уникальных.
Соответственно в случае дублирования в выборку попадет как одна ветка так и другая.
Пока вижу вариант после выборки еще раз проверить текущее положение дел в базе и убить неактуальную ветку или даже обе (в случае удаления записи).
28 дек 12, 14:55    [13700897]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Теоретик
Пока вижу вариант после выборки еще раз проверить текущее положение дел в базе и убить неактуальную ветку или даже обе (в случае удаления записи).

Включить READ COMMITTED SNAPSHOT, как тут уже советовали, — не вариант?
28 дек 12, 15:41    [13701309]     Ответить | Цитировать Сообщить модератору
 Re: Дубликаты при выборке по union all  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
а может задваиваются записи как раз по одну сторону от uniona ? Кривоватые джойны или еще чего.
28 дек 12, 15:44    [13701334]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить