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

Откуда:
Сообщений: 455
Есть таблица, вида

idpart nameAttr val
1 size 200
1 name asdf
2 size 200
2 name asdf2

Что нужно сделать.
Главная идея
Уметь выбирать как будто
select * from table1
where size = paramValue1 and name like paramValue2

Exists в where не предлагать
select * from table1 as a
where exists(select * from table1 where id=a.id ) and exists (select * from table1 where id=a.id) and (..тут name)

Спасибо
1 мар 13, 19:23    [14000840]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
hosTuk
Exists в where не предлагать
почему?
1 мар 13, 19:24    [14000842]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
селф джойн неа? или pivot ? или max(case ...) group by having?
1 мар 13, 19:37    [14000874]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
запилить представление - тоже не предлагать?
1 мар 13, 19:37    [14000875]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Паганель,

на той СУБД на которой делаю возникают взаимоблокировки, именно при варианте select c exists. С параллельными потоками delete из этой таблицы и параллельными потоками select c exists из этой же таблицы.
Вроде бы ms sql максимум бы ушел в таймаут при таком варианте, имхо.

Я же неправильно написал, вариант с exists такой примерно:

select * from table1 as a
where exists(select * from table1 where id=a.id and nameAttr=paramNameAttr1 and val = paramVal1) and exists (вторая фигня с другим атрибутом с val like paramVal2)

buser
селф джойн неа? или pivot ? или max(case ...) group by having?

Не совсем понял идею

Crimean, как оно будет выглядеть?
1 мар 13, 20:37    [14001044]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
Crimean
Member

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

как-то так

create view MyView
as
select 
...
t1.val as size,
t2.val as name,
...
from MyTable
...
left join Table1 as t1 on t1.idpart = MyTable.Id and t1.nameAttr = 'size'
left join Table1 as t2 on t2.idpart = MyTable.Id and t2.nameAttr = 'name'
...
1 мар 13, 20:55    [14001117]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
hosTuk
Member

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

Да в принципе вариант.
Правда динамически все собирается, но идея понятна, спасибо.

Вот все же интересно, будут ли мс скл взаимоблокировки. При селектание всей таблицы с подзапросами и дилитами в куче потоках. Одна операция(селект или дилит) одна транзакия.
1 мар 13, 21:06    [14001152]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
hosTuk
будут ли мс скл взаимоблокировки. При селектание всей таблицы с подзапросами и дилитами в куче потоках. Одна операция(селект или дилит) одна транзакия.


alter database mydb set read_committed_snapshot on
1 мар 13, 21:07    [14001154]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
hosTuk
Member

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

А в read commited будут?
1 мар 13, 21:13    [14001173]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
hosTuk
Crimean,

А в read commited будут?


конечно
1 мар 13, 21:28    [14001212]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
hosTuk
Member

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

А если все завернуть в такие Join, спасусь ли от взаимоблокировок? От delete
4 мар 13, 14:55    [14009171]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
Crimean
Member

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

а попробовать? версию сервера скажите, кстати
4 мар 13, 16:09    [14009653]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
sti
Member

Откуда:
Сообщений: 769
Вот так как-то было в одном проекте. Блокировки от многого зависят. Если не удаляете по пол-таблицы и индексы правильные, то и проблем особых нет.

create table #t (idpart int, nameAttr varchar(20), val varchar(20))

insert into #t (idpart, nameAttr, val)
values
(1,'size','200'),
(1,'name','asdf'),
(2,'size','200'),
(2,'size','asdf2')

create table #p (nameAttr varchar(20), val varchar(20))
insert into #p 
values
('size','200'),
('name','asdf')

SELECT idpart FROM #t t
JOIN #p p ON t.nameAttr = p.nameAttr AND t.val = p.val
GROUP BY idpart
HAVING COUNT(*) = (SELECT COUNT(*) FROM #p)

drop table #t
drop table #p
4 мар 13, 16:35    [14009805]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
Гость333
Member

Откуда:
Сообщений: 3683
sti
индексы правильные

Какие? В вашем примере нет ни одного.

sti
проблем особых нет.

А какие проблемы есть?
4 мар 13, 16:48    [14009912]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
hosTuk
Member

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

не... у меня не скл сервер к сожалению :)

При работе на скл сервер, редко встречал такие взаимоблокировки, максимум мог быть таймаут у кого-то, кто хотел обновить, когда кто-то ждал свой огромный отчет за год.
5 мар 13, 15:22    [14015041]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Возможно не было дедЛоков из-за малого количества потоков, как в данном варианте.
5 мар 13, 15:24    [14015050]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
Гость333
Member

Откуда:
Сообщений: 3683
hosTuk
у меня не скл сервер к сожалению :)

Ну вы, блин, даёте. А какая СУБД? И что сподвигло к созданию темы в форуме по Microsoft SQL Server? :-)
5 мар 13, 15:27    [14015071]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Гость333,

Было интересно будет ли на скл такая же проблема, но тут конечно ничего не сказать не воспроизведя на скл сервере все это дело. Ну и ветка скл самая активная.
СУБД DB2 9.7
5 мар 13, 15:29    [14015083]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
hosTuk
Ну и ветка скл самая активная.
ПТ намного активнее. Туда надо было.
5 мар 13, 15:43    [14015190]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
hosTuk
Member

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

Почему все же будут дедлоки с вариантом куча select exists, delete?(Одна операция, одна транзакция)
12 мар 13, 15:25    [14040770]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
hosTuk
Почему все же будут дедлоки с вариантом куча select exists, delete?(Одна операция, одна транзакция)


а почему бы им и не быть, особенно если будет куча конкурирующих операторов с блокировками общих данных?
12 мар 13, 18:52    [14042029]     Ответить | Цитировать Сообщить модератору
 Re: Select из таблицы с именами атрибутов  [new]
hosTuk
Member

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

т.е. когда будет fetch в одном селекте будут блокироваться другие строки, в то время когда они с эксклюзивной блокировкой на delete уже?
12 мар 13, 23:05    [14042738]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить