X
X
x672017-04-23 15:46:40
SQL
x67, 2017-04-23 15:46:40

How to generate a search query for size +/- 1?

There is a table of goods with a bunch of fields of characteristics. The task is to find the corresponding products in this table according to several parameters. For example, you need the products to be of the same shape, the same color, but the second product is +/- 1 position larger or smaller. Now it is implemented like this, but if the request is not very specific, then it searches for a very long time. SQL I study rather recently, that that can not catch up.

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  {те же самые условия})

All this is done in MS ACCESS

Answer the question

In order to leave comments, you need to log in

1 answer(s)
M
mletov, 2017-04-23
@x67

I write in MS SQL, there may be nuances in MS Access, but I would decide this way
1) In a temporary table or CTE I made a selection according to the search condition, only the size condition would be + - 1 specified in the search

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.[размер] = {условие по искомому размеру}

================================================= =======================================
Another option
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})

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question