Гибкий поиск найти дубликаты в базе данных - PullRequest
0 голосов
/ 05 июня 2018

У меня есть две таблицы - Warehouse (id) и StockLevel (id, productCode).
В магазине много StockLevels.

Я хочу найти дубликаты StockLevel для одного и того же продукта в одном магазине.
Пример: на складе "Минимаркет" есть две записи StockLevel для продукта "Apple".

Пока у меня есть это, но я не уверен, что он работает правильно:

select {wh.code}, {sl.productCode}, count({sl.pk}) as cnt 
from {StockLevel as sl  
left join Warehouse as wh on {sl.warehouse}={wh.pk}}  
group by ({wh.code}, {sl.productCode})
having count({sl.pk}) > 1

| id | productCode | warehouse |
--------------------------
| 1 | "apple"     | "mini" |
--------------------------
| 2 | "apple"     | "mini" |
--------------------------
| 3 | "apple"     | "maxi" |
--------------------------
| 4 | "apple"     | "macro" |
--------------------------
| 5 | "orange"    | "mini" |
--------------------------

Я хочу, чтобы была выбрана одна из первых двух записей (Id 1 и 2) (мне на самом деле все равно, какая из них).
Также у меня возникла проблема - если я использую этот запрос в FlexibleSearch, яне может привести его к сущности (StockLevel) и добавить {sl.pk} для запроса его повреждения.

1 Ответ

0 голосов
/ 05 июня 2018

Если вы просто хотите «первый» ряд, вы можете сделать:

select w.*
from warehouse w
where exists (select 1
              from warehouse w2
              where w2.warehouse = w.warehouse and w2.code = w.code and w2.id > w.id
             ) and
      not exists (select 1
                  from warehouse w2
                  where w2.warehouse = w.warehouse and w2.code = w.code and w2.id < w.id
                ) ;
...