2016-01-20 199 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基本上,如果您的聯接是正確的,那麼DISTINCT是一種刪除重複的方法。但是就像Gordon Lindoff所說,這個問題可能與您的JOIN有關,但除非我們知道您的數據集是什麼,否則我們無法分辨。希望這可以幫助。 –

0

假設i.item和l.location是主要的或唯一的鑰匙,任何您看到的重複項是由您的location_inventory表中的重複項導致的。這可能或可能不是你想要的。

SELECT DISTINCT只會消除真正的重複項(即所有選定列都重複的重複項)。如果這就是你想要的,使用它。否則,您可能需要創建一個使用SELECT DISTINCT的內部選擇來標識不希望重複的列,然後將內部選擇的結果連接回表以提取所有其他數據。

+0

重複在logistics_unit – Dre

+0

如果'location_inventory'中有兩行在其他列(例如'lot')中有不同的值,但在'logistics_unit'中有相同的值,那麼你想打印一行還是兩行? –