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

Откуда:
Сообщений: 1089
Вот из такой таблицы
+

lot type dim1 dim2 class
1 1 2 45 45
1 2 3 56 NULL
1 2 67 755 NULL
1 2 24 45 NULL
2 1 2 45 48
2 2 3 56 NULL
3 1 67 755 48
3 2 24 45 NULL
3 2 2 45 NULL
3 2 3 56 NULL
4 1 67 755 45
4 2 24 45 NULL
4 2 2 45 NULL
4 2 3 56 NULL
5 1 67 755 34
5 2 24 45 NULL


нужно выбрать строки с определенным значением поля class (не NULL) и связанные пол полю lot остальные записи.
Например, для параметра 45 будет такая выборка
+

ot type dim1 dim2 class
1 1 2 45 45
1 2 3 56 NULL
1 2 67 755 NULL
1 2 24 45 NULL
4 1 67 755 45
4 2 24 45 NULL
4 2 2 45 NULL
4 2 3 56 NULL



Вообще, возможно ли такое?
1 апр 13, 13:41    [14121364]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1089
waszkiewicz, Джойнить саму с собой?
1 апр 13, 13:46    [14121396]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
;with cte as (
  select *
 from table 
 where class = 45
)
select *
from table t1
  inner join cte t2 on t1.lot = t2.lot
1 апр 13, 13:48    [14121403]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
waszkiewicz
waszkiewicz, Джойнить саму с собой?

или джойнить,по факту без раницы ,или инлайн вью
1 апр 13, 13:48    [14121407]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

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

SELECT *
FROM T
WHERE EXISTS(SELECT * FROM T TT WHERE TT.lot=T.lot AND TT.class=45);
1 апр 13, 13:50    [14121415]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47049
SELECT *
FROM T
WHERE T.lot IN (SELECT TT.lot FROM T TT WHERE TT.class=45);
1 апр 13, 13:54    [14121443]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1089
Maxx
waszkiewicz
waszkiewicz, Джойнить саму с собой?

или джойнить,по факту без раницы ,или инлайн вью

Про инлайн вью можно примерчик?
1 апр 13, 13:59    [14121468]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
waszkiewicz,
select t1.*
from table t1
  inner join (
      select lot
      from table
     where class = 45
   ) t2 on t1.lot = t2.lot
1 апр 13, 14:01    [14121479]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1089
Может, стоит завести таблицу развязывающую LOT TYPE и с ней джойнить?
По факту, таблица - это упрощенный сводный отчет. Поле lot фактически развязывает m:n
1 апр 13, 14:05    [14121498]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Maxx
Member [скрыт]

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

ну чисто архитектурно - ессно не мешалоб, НО опять же - давать советы по архитектуре не имея понятия что и как - ето из области телепатии
1 апр 13, 14:25    [14121605]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1089
Maxx
waszkiewicz,
select t1.*
from table t1
  inner join (
      select lot
      from table
     where class = 45
   ) t2 on t1.lot = t2.lot

Еще вопрос - если в качестве table выступает cte, в которой джойнятся несколько таблиц, велик ли шанс словить взаимную блокировку при джойне этих же таблиц в "наружном запросе"
PS - грязное чтение не думаю, что будет помехой в этом случае
1 апр 13, 15:52    [14122159]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
waszkiewicz,
взаимную блокировку

на чтение ??? Что вы подразумеваете под термином ?
1 апр 13, 15:55    [14122191]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1089
Да вот просто получил такую блокировочку (deadlock) сразу опосля того, как приджойнил табличку.
1 апр 13, 15:58    [14122225]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Maxx
Member [скрыт]

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

посмотрите на граф дедлока
1 апр 13, 16:06    [14122311]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1089
Так уже переписал запрос - нету блокировки. Триггеров тоже вроде нет - вполне в одну из таблиц могли данные капать (т.е. дедлок внутри cte мог произойти)
1 апр 13, 16:08    [14122343]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить