Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите написать запрос (SQL Server 2000)  [new]
Old_Fish
Member

Откуда:
Сообщений: 47
Есть таблица, в которой хранятся составы изделий (штук 20 - 30):
parent_id int not null	-- код изделия 
child_id int not null 	-- код изделия, входящего в состав parent_id 
qnt float not null	-- кол-во изделий child_id в составе изделия parent_id


Составы изделий @a и @b совпадают, если запросы
select child_id, qnt from t where parent_id = @a
и
select child_id, qnt from t where parent_id = @b
возвращают совпадающие наборы записей.

Нужно убедиться в том, что существуют изделия, составы которых различаются, ответ нужен в виде ДА/НЕТ.
3 июл 14, 19:08    [16256783]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Я бы для начала перешёл на более высокую версию SQL.
3 июл 14, 19:21    [16256853]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
a_voronin,

переход за чей счет?
3 июл 14, 19:42    [16256942]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
aleks2
Guest
if exists ( select *
                from ( select child_id, qnt from t where parent_id = @a ) as a
                       full outer join
                       ( select child_id, qnt from t where parent_id = @b ) as b
                       on a.child_id = b.child_id and a.qnt = b. qnt
                where a.child_id is null or b.child_id is null
           )
print 'Различаются!'
4 июл 14, 05:47    [16258005]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
aleks2
Guest
a_voronin
Я бы для начала перешёл на более высокую версию SQL.

Думаешь там есть кнопка [Сделать все как я хачу]?
4 июл 14, 05:58    [16258010]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9169
Можно сравнивать результаты checksum_agg(), например.
4 июл 14, 11:14    [16258849]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Glory
Member

Откуда:
Сообщений: 104751
Владислав Колосов
Можно сравнивать результаты checksum_agg(), например.

If one of the values in the expression list changes, the checksum of the list also usually changes. However, there is a small chance that the checksum will not change.
4 июл 14, 12:09    [16259272]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
aleks2
a_voronin
Я бы для начала перешёл на более высокую версию SQL.

Думаешь там есть кнопка [Сделать все как я хачу]?


Можно собрать группу в XML и по хешу сравнить.
4 июл 14, 12:30    [16259397]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
a_voronin
aleks2
пропущено...

Думаешь там есть кнопка [Сделать все как я хачу]?


Можно собрать группу в XML и по хешу сравнить.
Зачем, если всё делается двумя вложенными предикатами NOT EXISTS()?
4 июл 14, 12:32    [16259421]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
iap
a_voronin
пропущено...


Можно собрать группу в XML и по хешу сравнить.
Зачем, если всё делается двумя вложенными предикатами NOT EXISTS()?


Так напишите, мы посмотрим? В любом случае это будет медленно. O(n^2), с XML и хешом будет O(n*ln(n)), впрочем, от общего объема зависит
4 июл 14, 13:34    [16259832]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Glory
Member

Откуда:
Сообщений: 104751
a_voronin
Так напишите, мы посмотрим?

Уже написали
4 июл 14, 13:35    [16259840]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Glory
Member

Откуда:
Сообщений: 104751
a_voronin
В любом случае это будет медленно. O(n^2), с XML и хешом будет O(n*ln(n)), впрочем, от общего объема зависит

Особенно приятно смотреть на ваши рассуждения про XML для SQL Server 2000
4 июл 14, 13:36    [16259847]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Glory
a_voronin
Так напишите, мы посмотрим?

Уже написали


Написанный запрос сравнивает @a и @b, а задача стояла

"Нужно убедиться в том, что существуют изделия, составы которых различаются, ответ нужен в виде ДА/НЕТ."

Я так понял, нужно среди всех групп в таблице сделать попарные сравнения каждой группы с каждой
4 июл 14, 13:38    [16259867]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Glory
Member

Откуда:
Сообщений: 104751
a_voronin
Написанный запрос сравнивает @a и @b, а задача стояла

"Составы изделий @a и @b совпадают, если запросы
select child_id, qnt from t where parent_id = @a
и
select child_id, qnt from t where parent_id = @b
возвращают совпадающие наборы записей. "
4 июл 14, 13:40    [16259881]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Glory
a_voronin
Написанный запрос сравнивает @a и @b, а задача стояла

"Составы изделий @a и @b совпадают, если запросы
select child_id, qnt from t where parent_id = @a
и
select child_id, qnt from t where parent_id = @b
возвращают совпадающие наборы записей. "
... то есть, в одном наборе нет (NOT EXISTS) записи, которой нет (NOT EXISTS) в другом и наоборот.
4 июл 14, 14:41    [16260278]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9169
Можно, например, если даже малейшая вероятность совпадения контрольных сумм не устраивает, сравнить количество строк
запроса:
select * from a
union
select * from b

с количеством строк одной из таблиц.
4 июл 14, 14:53    [16260391]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
IF EXISTS
(
 SELECT * FROM t WHERE parent_id=@a AND NOT EXISTS(SELECT * FROM t t2 WHERE t2.parent_id=@b AND t2.child_id=t.child_id AND t2.qnt=t.qnt)
 UNION ALL
 SELECT * FROM t WHERE parent_id=@b AND NOT EXISTS(SELECT * FROM t t2 WHERE t2.parent_id=@a AND t2.child_id=t.child_id AND t2.qnt=t.qnt)
)
PRINT 'Различаются';
4 июл 14, 15:22    [16260651]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
IF EXISTS
(
 SELECT *
 FROM t
 WHERE t.parent_id IN(@a,@b)
   AND NOT EXISTS
           (
            SELECT *
            FROM t t2
            WHERE t2.parent_id IN(@a,@b)
              AND t2.parent_id<>t.parent_id
              AND t2.child_id=t.child_id
              AND t2.qnt=t.qnt
            )
)
PRINT 'Различаются';
4 июл 14, 15:40    [16260813]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4542
осталось только float на чтонить более пристойное заменить...
4 июл 14, 16:15    [16261054]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Glory
a_voronin
В любом случае это будет медленно. O(n^2), с XML и хешом будет O(n*ln(n)), впрочем, от общего объема зависит

Особенно приятно смотреть на ваши рассуждения про XML для SQL Server 2000


Опять прикапываемся? Первое, что я сказал -- надо переходить на более высокую версию SQL. Естественно в 2000 XML нет
4 июл 14, 16:32    [16261143]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
a_voronin,
Жжешь не по децки.
Для тех, кто в танке, за чей счет переход будет? И зачем он нужен?
4 июл 14, 16:34    [16261159]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Glory
Member

Откуда:
Сообщений: 104751
a_voronin
Опять прикапываемся? Первое, что я сказал -- надо переходить на более высокую версию SQL. Естественно в 2000 XML нет

А вы всегда решаете задачу как удобнее вам, а не создавшему тему ?
Версия сервера указана.
Решение приведено.
Что вы лезете со своим XML в калашный ряд ?
4 июл 14, 16:37    [16261177]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
a_voronin
Glory
пропущено...

Уже написали


Написанный запрос сравнивает @a и @b, а задача стояла

"Нужно убедиться в том, что существуют изделия, составы которых различаются, ответ нужен в виде ДА/НЕТ."

Я так понял, нужно среди всех групп в таблице сделать попарные сравнения каждой группы с каждой


Это довольно бредовая с точки зрения здравого смысла задача, но написать такой запрос для 2000 - тоже не бином Ньютона.
4 июл 14, 16:38    [16261184]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Glory
a_voronin
Опять прикапываемся? Первое, что я сказал -- надо переходить на более высокую версию SQL. Естественно в 2000 XML нет

А вы всегда решаете задачу как удобнее вам, а не создавшему тему ?
Версия сервера указана.
Решение приведено.
Что вы лезете со своим XML в калашный ряд ?


Здесь никто не написал решения изначально поставленной задачи ещё по SQL 2000. Некоторые думают, что решение написано, но не того, что сказано.
4 июл 14, 17:08    [16261377]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос (SQL Server 2000)  [new]
Glory
Member

Откуда:
Сообщений: 104751
a_voronin
Некоторые думают, что решение написано, но не того, что сказано.

зато вы написали ценную формулу сравнения EXISTS с гипотетическим XML.
Пожалуйста решение _своей_ задачи продолжайте в другой теме
4 июл 14, 17:12    [16261408]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить