2016-01-20 2 views
1

Хорошо, я и совершенно новый для SQL так голый со мной. Я создал заявление, в котором у меня есть результаты, которые я хотел, но хотел избавиться от повторяющихся результатов. Какое это простое решение? Вот мое заявлениеУдалить дублировать SQL Добавить результаты

SELECT 
    li.location, 
    li.logistics_unit, 
    li.item, 
    li.company, 
    li.item_desc, 
    li.on_hand_qty, 
    li.in_transit_qty, 
    li.allocated_qty, 
    li.lot, 
    i.item_category3, 
    location.locating_zone, 
    location.location_subclass, 
    i.item_category4 
FROM 
    location_inventory li 
INNER JOIN item i ON li.item = i.item 
INNER JOIN location l ON l.location = li.location 
WHERE 
    i.item_category3 = 'AS' AND 
    li.warehouse = 'river' AND 
    li.location NOT LIKE 'd%' AND 
    li.location NOT LIKE 'stg%' 
ORDER BY 
    li.item asc 
+3

Как правило, дублирующие результаты в подобном запросе вызваны логикой или проблемой объединения. Я буду исследовать дальше (посмотрев промежуточные результаты), чтобы убедиться, что все условия верны и полны. –

ответ

1

Если вы уверены в вашем JOIN то DISTINCT должен сделать трюк, как так:

select DISTINCT 
     location_inventory.location , 
     location_inventory.logistics_unit , 
     location_inventory.item , 
     location_inventory.company , 
     location_inventory.item_desc , 
     location_inventory.on_hand_qty , 
     location_inventory.in_transit_qty , 
     location_inventory.allocated_qty , 
     location_inventory.lot , 
     item.item_category3 , 
     location.locating_zone , 
     location.location_subclass , 
     item.item_category4 
from location_inventory 
INNER JOIN item 
on location_inventory.item=item.item 
INNER JOIN location 
on location_inventory.location=location.location 
where item.item_category3 = 'AS' and 
     location_inventory.warehouse = 'river' and 
     location_inventory.location not like 'd%' and 
     location_inventory.location not like 'stg%' 
order by location_inventory.item asc 
+1

Вам не хватает псевдонима таблицы 'li' – Rahul

+0

@Rahul Спасибо :) –

+1

@Dre в основном, если ваши JOINS верны, тогда DISTINCT - это способ удалить обманы. но, как и Гордон Линдофф сказал, что проблема может быть с вашей JOIN, но мы не можем сказать, если мы не знаем, что ваши наборы данных. Надеюсь это поможет. –

0

Предполагая, что i.item и l.location являются первичными или уникальными ключами, любого дубликаты, которые вы видите, вызываются дублирующимися элементами в вашей таблице location_inventory. Это может быть или не быть тем, чего вы хотите.

SELECT DISTINCT устранит только истинные дубликаты (т. Е. Те, где все выбранные столбцы дублируются). Если это то, что вы хотите, используйте его. В противном случае вам может потребоваться сделать внутренний выбор, который использует SELECT DISTINCT для идентификации столбцов, в которых вы не хотите дублировать, и присоедините результаты внутреннего выбора обратно к таблицам, чтобы вытащить все остальные данные.

+0

дубликаты находятся в logistics_unit – Dre

+0

Если у вас есть две строки в 'location_inventory', которые имеют разные значения в других столбцах (например,' lot'), но такое же значение в 'logistics_unit', вы хотите напечатать одну или две строки? –

Смежные вопросы