Попытка избежать дублирования записей из запроса - PullRequest
0 голосов
/ 28 мая 2018

У меня есть 2 таблицы со следующей структурой:

 ------------------------------------
| dbo.Katigories  | dbo.Products     |
|-----------------|------------------|
| product_id      | product_id       |
| Cat_Main_ID     | other data.....  |
| Cat_Sub_ID      | other data.....  |
| Cat_Sub_Sub_ID  | other data.....  |
| other data..... | other data.....  |

Я хочу получить все продукты из таблицы dbo.Products, имеющие одинаковые Cat_Main_ID и одинаковые Cat_Sub_ID.Для этого у меня есть следующий оператор SELECT:

SELECT * FROM dbo.katigories, dbo.Products
WHERE
dbo.katigories.Cat_Main_ID  = (the Cat_Main_ID – exists_in-my url - query string)
AND
dbo.katigories.Cat_Sub_ID  = (the Cat_Sub_ID – exists_in-my url - query string)
AND
dbo.katigories.product_id = dbo.Products.product_id

К сожалению, этот оператор SELECT дает мне дублированные записи продуктов.Я знаю, почему это происходит: причина в том, что некоторые продукты принадлежат одновременно ко многим категориям или подкатегориям.Чего я не знаю, так это того, как мне удается получать только уникальные записи из таблицы Products.Только уникальный product_id без дублирования.

Может кто-нибудь помочь с правильным синтаксисом моего запроса?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Думаю, вы можете добавить директиву DISTINCT после директивы SELECT

0 голосов
/ 28 мая 2018

В SQL Server вы можете использовать этот трюк:

SELECT TOP (1) WITH TIES *
FROM dbo.katigories k JOIN
     dbo.Products p
     ON k.product_id = p.product_id
WHERE k.Cat_Main_ID  = (the Cat_Main_ID – exists_in-my url - query string) AND
      k.Cat_Sub_ID  = (the Cat_Sub_ID – exists_in-my url - query string)
ORDER BY ROW_NUMBER() OVER (PARTITION BY p.product_id ORDER BY NEWID());

В других базах данных вы можете сделать нечто очень похожее с ROW_NUMBER() в подзапросе или CTE.

Примечания:

  • SELECT * опасно, поскольку у вас есть столбцы с одинаковыми именами.
  • Всегда используйте правильный, правильный, стандартный, явный JOINсинтаксис. Никогда не используйте запятые в предложении FROM.
  • Псевдонимы таблиц облегчают написание и чтение запроса.
...