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

Откуда:
Сообщений: 4
Все привет.

В базе есть 2 таблицы: наборы(kits) и комплекты(sets). Наборы содержат товары и количество, комплекты содержат наборы, товары, количество, причем количество может быть кратно увеличено. Нужно найти комплекты с неверными наборами(не кратно различается количество, состав и т.п.)

Тестовые скрипты для создания и заполнения таблиц во вложении.

Не получается написать условия в запросе, по количеству вроде вышло, а вот по составу возникли сложности, не могу сравнить составы...

select 
	s.id, s.name	
from sets as s
left join kits as k on s.id_kit = k.id and
	s.id_item = k.id_item
-- where not s.value%k.value = 0


Подскажите, пож-та :)

К сообщению приложен файл (script.sql - 10Kb) cкачать
25 дек 15, 12:00    [18608560]     Ответить | Цитировать Сообщить модератору
 Re: Запрос, сопоставление наборов записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20603
А проверить скрипт перед выкладыванием гордость не позволила? Где, мать иху, таблица items?

И поясните, что за структура у таблицы sets - с точки зрения обывателя она бредовая и не имеет смысла.

PS. http://sqlfiddle.com/#!3/caf81c/1
25 дек 15, 12:31    [18608718]     Ответить | Цитировать Сообщить модератору
 Re: Запрос, сопоставление наборов записей  [new]
Jaffar
Member

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

опиши толком задачу и предметную область с примером.
О чем речь?
Что за наборы и комплекты?

Фигня какая-то....
25 дек 15, 12:46    [18608838]     Ответить | Цитировать Сообщить модератору
 Re: Запрос, сопоставление наборов записей  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
https://www.sql.ru/forum/834066/pomogite-pls-razlozhit-yabloki-po-korzinam
25 дек 15, 12:49    [18608860]     Ответить | Цитировать Сообщить модератору
 Re: Запрос, сопоставление наборов записей  [new]
localhost777
Member

Откуда:
Сообщений: 4
2Akina:

Сорри, вот скрипт:
CREATE TABLE [dbo].[items](
	[id] [char](10) NOT NULL,
	[name] [nchar](100) NULL
) ON [PRIMARY]

INSERT [dbo].[items] ([id], [name]) VALUES (N'1         ', N'item1                                                                                               ')
INSERT [dbo].[items] ([id], [name]) VALUES (N'2         ', N'item2                                                                                               ')
INSERT [dbo].[items] ([id], [name]) VALUES (N'3         ', N'item3                                                                                               ')
INSERT [dbo].[items] ([id], [name]) VALUES (N'4         ', N'item4                                                                                               ')


sets - это комплект наборов, комплект может состоять из нескольких одинаковых наборов.
Тут суть не в структуре, это для теста. Примером может быть заполнение документа разными наборами и проверка, чтобы количество было кратно набору и по составу сходилось.
Мне кажется, что тут нужно использовать full join, по условию еще думаю.
25 дек 15, 12:51    [18608874]     Ответить | Цитировать Сообщить модератору
 Re: Запрос, сопоставление наборов записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20603
localhost777
sets - это комплект наборов, комплект может состоять из нескольких одинаковых наборов.

Если так, то она должна иметь структуру
CREATE TABLE [sets](
	[id] [nchar](10) NOT NULL,
	[name] [nchar](100) NOT NULL,
	[id_kit] [nchar](10) NOT NULL,
	[value] [int] NOT NULL
)
причём value указывает количество наборов, а не товаров. А id вообще primary key.
И никаких проверок в таком случае в принципе не нужно.
25 дек 15, 13:17    [18609071]     Ответить | Цитировать Сообщить модератору
 Re: Запрос, сопоставление наборов записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20603
Пардон, (id, id_kit) - primary key (или хотя бы unique).
25 дек 15, 13:18    [18609079]     Ответить | Цитировать Сообщить модератору
 Re: Запрос, сопоставление наборов записей  [new]
localhost777
Member

Откуда:
Сообщений: 4
Согласен, так проще :). Но смысл в том, чтобы не меняя структуру написать запрос с условием.
25 дек 15, 13:27    [18609142]     Ответить | Цитировать Сообщить модератору
 Re: Запрос, сопоставление наборов записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20603
localhost777
смысл в том, чтобы не меняя структуру написать запрос с условием.

Так у тебя данные в таблице sets логически несовместны...
25 дек 15, 13:53    [18609315]     Ответить | Цитировать Сообщить модератору
 Re: Запрос, сопоставление наборов записей  [new]
localhost777
Member

Откуда:
Сообщений: 4
В том-то и задача: выяснить где не расхождения.
25 дек 15, 13:56    [18609338]     Ответить | Цитировать Сообщить модератору
 Re: Запрос, сопоставление наборов записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20603
Тогда смотри.

Сначала возьми таблицу sets, из неё извлеки только пары (distinct id, id_kit).
Далее - по любой записи из группы по id (скажем, min(id_kit)) посчитай количество наборов, проверь, что оно целое (если нет - уже косяк), на основании данных таблицы kits составь, как должна выглядеть группа записей из sets для этого id, и сравни с тем, что есть в sets реально. Не совпало хотя бы в одной записи - косяк.
25 дек 15, 14:22    [18609456]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить