Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Как выбрать записив этом примере?  [new]
aleks2
Guest
Ролг Хупин
Massa52
aleks2,
для меня это решение - вынос мозга.
Смотрел, смотрел - так и не понял.

+ идиотские рассуждения к постановке задачи:
Нафига хранить 8 отдельных полей да еще миллионами - когда достаточно одно вычисляемое поле.
Из этого поля всегда можно однозначно восстановить все 8.


Я привел упрощенный пример, но вы, коллеги, естественно, вольны упражняться в эитетах об "идиотскости" и т,д.
Некоторым это улучшает самооценку и самочувствие.

Не выступай. Каков вопрос - таков и ответ.

На вот те... еще более идиетский вариант

declare @t table(id int, p1 int, p2 int, p3 int, p4 int, p5 int, p6 int, p7 int, p8 int);

insert into @t(id, p1, p2, p3, p4,p5, p6, p7, p8)
select 1, 0,0,0,0, 0,0,0,0
union all
select 2, 1,0,0,0, 0,0,0,0
union all
select 3, 1,1,0,0, 0,0,0,0
union all
select 4, 1,1,1,0, 0,0,0,0
union all
select 5, 1,1,1,1, 0,0,0,0
union all
select 6, 1,1,1,1, 0,0,1,1
union all
select 7, 1,1,1,1, 1,1,0,0
union all
select 8, 1,1,1,1, 1,1,1,1
union all
select 9, 1,1,0,0, 1,1,0,0
union all
select 10, 1,1,0,0, 1,0,0,0
union all
select 11, 0,0,1,1, 1,1,0,0
union all
select 12, 0,0,1,1, 0,0,1,1
union all
select 13, 1,1,0,1, 0,0,0,0
union all
select 14, 1,1,0,0, 0,0,1,1;

with tmpl as ( select p1 = 1, p2 = 1, p3 = 0, p4 = 0, p5 = 0, p6 = 0, p7 = 0, p8 = 0 
               union all
               select 1, 1, 1, 1, 0, 0, 0, 0 
               union all
               select 1, 1, 1, 1, 1, 1, 0, 0 
               union all
               select 1, 1, 1, 1, 1, 1, 1, 1 
             )
select t.* from @t t 
  where exists( select p1, p2, p3, p4,p5, p6, p7, p8 intersect select * from tmpl )
10 мар 17, 20:09    [20283539]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4141
Как заполнить такую таблицу в цикле, чтобы не перечислять руками?
Сейчас так.
DECLARE @masks table (m varchar(16));
insert into @masks
values
('1100000000000000'),
('1111000000000000'),
('1111110000000000'),
('1111111100000000'),
('1111111111000000'),
('1111111111110000'),
('1111111111111100'),
('1111111111111111');

Условия усугубляются:

надо сделать маски для всех записей:
1. которые начинаются с ненулевой пары
2. но допускаются парные дырки типа
('1100110000000000')
('1100001111001100'),
и т.д.
13 мар 17, 15:06    [20289963]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
Ролг Хупин,

так?
WITH
t ( v ) AS (
  SELECT
  '00' 
  UNION ALL
  SELECT
  '11'
)
SELECT
  CONCAT( t1.v, t2.v, t3.v, t4.v, t5.v, t6.v, t7.v, t8.v )
FROM
  t t1
  CROSS APPLY t t2
  CROSS APPLY t t3
  CROSS APPLY t t4
  CROSS APPLY t t5
  CROSS APPLY t t6
  CROSS APPLY t t7
  CROSS APPLY t t8
13 мар 17, 15:43    [20290144]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
aleks2
Guest
Ролг Хупин
Как заполнить такую таблицу в цикле, чтобы не перечислять руками?
Сейчас так.
DECLARE @masks table (m varchar(16));
insert into @masks
values
('1100000000000000'),
('1111000000000000'),
('1111110000000000'),
('1111111100000000'),
('1111111111000000'),
('1111111111110000'),
('1111111111111100'),
('1111111111111111');

Условия усугубляются:

надо сделать маски для всех записей:
1. которые начинаются с ненулевой пары
2. но допускаются парные дырки типа
('1100110000000000')
('1100001111001100'),
и т.д.


Страдалец, подумай об индексах.
Их судьба печальна в выбранном тобою варианте.
13 мар 17, 16:06    [20290240]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4141
aleks2
Ролг Хупин
Как заполнить такую таблицу в цикле, чтобы не перечислять руками?
Сейчас так.
DECLARE @masks table (m varchar(16));
insert into @masks
values
('1100000000000000'),
('1111000000000000'),
('1111110000000000'),
('1111111100000000'),
('1111111111000000'),
('1111111111110000'),
('1111111111111100'),
('1111111111111111');

Условия усугубляются:

надо сделать маски для всех записей:
1. которые начинаются с ненулевой пары
2. но допускаются парные дырки типа
('1100110000000000')
('1100001111001100'),
и т.д.


Страдалец, подумай об индексах.
Их судьба печальна в выбранном тобою варианте.


Я отвечу в твоем же стиле:
Писец , какие тут индексы? это таблица переменная для временного использования в процедуре
13 мар 17, 16:12    [20290269]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4141
Руслан Дамирович
Ролг Хупин,

так?
WITH
t ( v ) AS (
  SELECT
  '00' 
  UNION ALL
  SELECT
  '11'
)
SELECT
  CONCAT( t1.v, t2.v, t3.v, t4.v, t5.v, t6.v, t7.v, t8.v )
FROM
  t t1
  CROSS APPLY t t2
  CROSS APPLY t t3
  CROSS APPLY t t4
  CROSS APPLY t t5
  CROSS APPLY t t6
  CROSS APPLY t t7
  CROSS APPLY t t8



;-)

то, что надо!
13 мар 17, 16:13    [20290274]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
Massa52
Member

Откуда:
Сообщений: 384
Ролг Хупин
Как заполнить такую таблицу в цикле, чтобы не перечислять руками?
Сейчас так.
DECLARE @masks table (m varchar(16));
insert into @masks
values
('1100000000000000'),
('1111000000000000'),
('1111110000000000'),
('1111111100000000'),
('1111111111000000'),
('1111111111110000'),
('1111111111111100'),
('1111111111111111');

Условия усугубляются:

надо сделать маски для всех записей:
1. которые начинаются с ненулевой пары
2. но допускаются парные дырки типа
('1100110000000000')
('1100001111001100'),
и т.д.


А можно спросить - почему varchar а не char?
И еще - почему в двоичном представлении - это так надо или так проще для компьютера?
14 мар 17, 01:46    [20291882]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
aleks2
Guest
Ролг Хупин
aleks2
пропущено...


Страдалец, подумай об индексах.
Их судьба печальна в выбранном тобою варианте.


Я отвечу в твоем же стиле:
Писец , какие тут индексы? это таблица переменная для временного использования в процедуре


Открою те страшную тайну: на таблицах-переменных тоже есть индексы.
14 мар 17, 06:21    [20291941]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
aleks2,
автор
Открою те страшную тайну: на таблицах-переменных тоже есть индексы.
вершина извращения на переменные таблицы делать индексы :)
14 мар 17, 12:13    [20292809]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
aleks2
Guest
TaPaK
aleks2,
автор
Открою те страшную тайну: на таблицах-переменных тоже есть индексы.
вершина извращения на переменные таблицы делать индексы :)


Почему? Это реально работает.
Помогая избежать скулежа "табличные переменные работают медленно".

ЗЫ. На любой таблице должен быть индекс. Ибо это - харашо.
14 мар 17, 12:25    [20292860]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
Кесарь
Member

Откуда:
Сообщений: 463
Кстати вопрос: а создание индекса заставит оптимизатор понимать, что в табл. пер. не одна запись, а много?
14 мар 17, 13:00    [20293045]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Кесарь
Кстати вопрос: а создание индекса заставит оптимизатор понимать, что в табл. пер. не одна запись, а много?

неа
14 мар 17, 13:04    [20293072]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
Кесарь
Member

Откуда:
Сообщений: 463
TaPaK
Кесарь
Кстати вопрос: а создание индекса заставит оптимизатор понимать, что в табл. пер. не одна запись, а много?

неа


Значит всё равно хинты нужны. Или как его заставить это понять?
14 мар 17, 13:05    [20293077]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Кесарь,

не использовать для "больших" таблиц, скажем там где NL будет оптимален или хинт или флаг
14 мар 17, 13:07    [20293094]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
Кесарь
Member

Откуда:
Сообщений: 463
TaPaK
Кесарь,

не использовать для "больших" таблиц, скажем там где NL будет оптимален или хинт или флаг


Прошу прощения, но вы так построили фразу, что я ничего не понял.

"Казнить нельзя помиловать"...
14 мар 17, 13:17    [20293159]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Кесарь
TaPaK
Кесарь,

не использовать для "больших" таблиц, скажем там где NL будет оптимален или хинт или флаг


Прошу прощения, но вы так построили фразу, что я ничего не понял.

"Казнить нельзя помиловать"...
так и есть, каждый сам себе ставит запятую, моя после казнить :)
14 мар 17, 13:18    [20293166]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
o-o
Guest
Кесарь
TaPaK
Кесарь,

не использовать для "больших" таблиц, скажем там где NL будет оптимален или хинт или флаг


Прошу прощения, но вы так построили фразу, что я ничего не понял.

"Казнить нельзя помиловать"...

да как запятую ни ставь,
не прокатит у вас хинт в запросе с табличной переменной
14 мар 17, 13:34    [20293268]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
o-o
Кесарь
пропущено...


Прошу прощения, но вы так построили фразу, что я ничего не понял.

"Казнить нельзя помиловать"...

да как запятую ни ставь,
не прокатит у вас хинт в запросе с табличной переменной

чёйта???
DECLARE @T TABLE (ID INT PRIMARY KEY)
INSERT INTO @T(Id) SELECT DISTINCT Number FROM master..spt_Values 

SELECT 
*
FROM @T a
INNER JOIN @T b
ON
	a.Id  = b.Id
OPTION (RECOMPILE)
14 мар 17, 13:36    [20293282]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
o-o
Guest
смешной какой.
попробуй насильно тип джойна прописать,
ведь кажется речь шла о NL?
14 мар 17, 13:38    [20293292]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
o-o
смешной какой.
попробуй насильно тип джойна прописать,
ведь кажется речь шла о NL?

мда, при чём здесь NL?
14 мар 17, 13:41    [20293316]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
o-o
Guest
надо наверное спросить автора, т.е. себя?
TaPaK
Кесарь,

не использовать для "больших" таблиц, скажем там где NL будет оптимален или хинт или флаг

поменять тип соединения в запросе с табличной переменной хинтом не выйдет
14 мар 17, 13:45    [20293339]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
TaPaK
Member

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

ладно читайте так "не использовать для "больших" таблиц, скажем там где NL будет оптимален" без всего остального
14 мар 17, 13:46    [20293344]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
ладно, речь о том что использовать переменную таблицу стоит либо на очень малых объёмах либо если оптимальный план будет всё равно с NL на эту таблицу... как-то так сумбурненько
14 мар 17, 13:49    [20293365]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
aleks2
Guest
Кесарь
Кстати вопрос: а создание индекса заставит оптимизатор понимать, что в табл. пер. не одна запись, а много?

Это - не так уж важно.
Главное - он помогает оптимизатору понять: "можно не сканировать таблицу".
14 мар 17, 14:49    [20293748]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записив этом примере?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
aleks2
Кесарь
Кстати вопрос: а создание индекса заставит оптимизатор понимать, что в табл. пер. не одна запись, а много?

Это - не так уж важно.
Главное - он помогает оптимизатору понять: "можно не сканировать таблицу".

но соединение всегда останется NL
14 мар 17, 16:00    [20294158]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить