x67
@x67

Как сформировать запрос поиска размера +/- 1?

Есть таблица товаров с кучей полей характеристик. Задача состоит в том, чтобы найти в этой таблице соответствующие товары по нескольким параметрам. К примеру, нужно что бы товары были одной формы, одного цвета, но второй товар был размером на +/- 1 позицию больше или меньше. Сейчас это реализуется так, но если не сильно конкретезировать запрос, то ищет очень долго. SQL изучаю относительно недавно, что то может не догоняю.
SELECT a.[артикул], b.[артикул], 
FROM Товары AS a INNER JOIN Товары AS b
ON (a.[артикул]<>b.[артикул] AND a.[форма]=b.[форма] AND a.[цвет]=b.[цвет] AND a.[размер]>b.[размер])
WHERE b.[размер]=(SELECT MAX(c.[размер]) FROM Товары AS c WHERE  {те же самые условия})

Делается это все в MS ACCESS
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
@mletov
Пишу на MS SQL, в MS Access могут быть нюансы, но я бы решил так
1) Во временную таблицу или CTE сделал выборку по условию поиска, только условие по размеру слелал бы +- 1 указнный в поиске
SELECT * 
INTO #tmp_search 
FROM Товары
WHERE {условия поиска кроме рамера}
AND [размер] BETWEEN [ИскомыйРазмер] - 1 AND [ИскомыйРазмер] + 1


2)
SELECT 
FROM #tmp_search  AS t1
INNER JOIN #tmp_search AS t2
WHERE t1.[артикул]<>t2.[артикул]
AND t2.[размер] BETWEEN t1.[размер] - 1 AND t1.[размер] + 1
AND t1.[размер] = {условие по искомому размеру}

==========================================================================================
Еще один вариант
SELECT a.[артикул], b.[артикул] 
FROM Товары AS a 
INNER JOIN Товары AS b
ON (a.[артикул]<>b.[артикул] AND a.[форма]=b.[форма] AND a.[цвет]=b.[цвет])
AND b.[размер] BETWEEN a.[размер]-1 AND  a.[размер]+1
 WHERE  {условия поиска по a})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы