Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
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] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Я бы для начала перешёл на более высокую версию SQL. |
3 июл 14, 19:21 [16256853] Ответить | Цитировать Сообщить модератору |
Ken@t Member Откуда: 大地 Сообщений: 3264 |
a_voronin, переход за чей счет? |
3 июл 14, 19:42 [16256942] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Думаешь там есть кнопка [Сделать все как я хачу]? |
||
4 июл 14, 05:58 [16258010] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8309 |
Можно сравнивать результаты checksum_agg(), например. |
4 июл 14, 11:14 [16258849] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
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] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Можно собрать группу в XML и по хешу сравнить. |
||||
4 июл 14, 12:30 [16259397] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
|
||||
4 июл 14, 12:32 [16259421] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Так напишите, мы посмотрим? В любом случае это будет медленно. O(n^2), с XML и хешом будет O(n*ln(n)), впрочем, от общего объема зависит |
||||
4 июл 14, 13:34 [16259832] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Уже написали |
||
4 июл 14, 13:35 [16259840] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Особенно приятно смотреть на ваши рассуждения про XML для SQL Server 2000 |
||
4 июл 14, 13:36 [16259847] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Написанный запрос сравнивает @a и @b, а задача стояла "Нужно убедиться в том, что существуют изделия, составы которых различаются, ответ нужен в виде ДА/НЕТ." Я так понял, нужно среди всех групп в таблице сделать попарные сравнения каждой группы с каждой |
||||
4 июл 14, 13:38 [16259867] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
"Составы изделий @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] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
|
||||
4 июл 14, 14:41 [16260278] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8309 |
Можно, например, если даже малейшая вероятность совпадения контрольных сумм не устраивает, сравнить количество строк запроса: select * from a union select * from b с количеством строк одной из таблиц. |
4 июл 14, 14:53 [16260391] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
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] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
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] Ответить | Цитировать Сообщить модератору |
buser Member Откуда: Санкт-Петербург Сообщений: 4537 |
осталось только float на чтонить более пристойное заменить... |
4 июл 14, 16:15 [16261054] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Опять прикапываемся? Первое, что я сказал -- надо переходить на более высокую версию SQL. Естественно в 2000 XML нет |
||||
4 июл 14, 16:32 [16261143] Ответить | Цитировать Сообщить модератору |
Ken@t Member Откуда: 大地 Сообщений: 3264 |
a_voronin, Жжешь не по децки. Для тех, кто в танке, за чей счет переход будет? И зачем он нужен? |
4 июл 14, 16:34 [16261159] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А вы всегда решаете задачу как удобнее вам, а не создавшему тему ? Версия сервера указана. Решение приведено. Что вы лезете со своим XML в калашный ряд ? |
||
4 июл 14, 16:37 [16261177] Ответить | Цитировать Сообщить модератору |
Кот Матроскин Member Откуда: Москва Сообщений: 8933 |
Это довольно бредовая с точки зрения здравого смысла задача, но написать такой запрос для 2000 - тоже не бином Ньютона. |
||||
4 июл 14, 16:38 [16261184] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Здесь никто не написал решения изначально поставленной задачи ещё по SQL 2000. Некоторые думают, что решение написано, но не того, что сказано. |
||||
4 июл 14, 17:08 [16261377] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
зато вы написали ценную формулу сравнения EXISTS с гипотетическим XML. Пожалуйста решение _своей_ задачи продолжайте в другой теме |
||
4 июл 14, 17:12 [16261408] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |