2016-06-16 74 views
0

我相信這個問題已經得到解答,但是我找不到它,或者答案太複雜。我是SQL新手,不確定如何一般性地輸入這個字。SQL返回所有行,其中2個值重複

我有一個安裝在設備上的軟件mySQL數據庫。我的查詢來提取所有的數據有更多的字段和更多的連接,但爲了簡潔,我只包含了一些。我需要添加另一個維度來創建一份報告,列出設備在同一產品系列中安裝多個軟件的每種情況。

sample

現在我有代碼有點像這一點,它沒有做什麼,我需要。我在exists上看到過一些信息,但這些例子並沒有考慮到多個連接,所以這個語法逃脫了我。幫幫我?

select 
devices.name, 
sw_inventory.product, 
products.family_name, 
sw_inventory.ignore_usage, 

from sw_inventory 

inner join products 
on sw_inventory.product=products.product_name 

inner join devices 
on sw_inventory.device_name=devices.name 

where sw_inventory.ignore=0 

group by devices.name, products.family_name 
+0

首先,我沒有全部的模式,併爲模式添加了一些示例,並且預期結果看起來會大有幫助。但是,我只是猜測你想要'通過具有count(devices.name)> 0的devices.name進行分組或者這種類型的東西。 –

+0

你的查詢寫得不好,不確定。你在'select'1中有兩列既沒有聚合也沒有參數到聚合函數。 –

+0

我做了一個子集,所以也許這會傷害我。但是,是的,我相信它寫得不好!因此,問題:) – Allegra

回答

1

這個主題有很多答案,但我絕對理解並不總是知道術語。你正在尋找如何找到重複的值。

基本上這是一個兩步過程。 1找到重複項2,將它們與原始記錄相關聯,如果你想要的話。注意第二部分是可選的。

所以從字面上找到所有查詢的重複,你以後group by報表提供

ADD HAVING COUNT(*) > 1。如果您想知道有多少個重複項,請添加一個計算列以對其進行計數。

select 
devices.name, 
sw_inventory.product, 
products.family_name, 
sw_inventory.ignore_usage, 
NumberOfDuplicates = COUNT(*) 
from sw_inventory 

inner join products 
on sw_inventory.product=products.product_name 

inner join devices 
on sw_inventory.device_name=devices.name 

where sw_inventory.ignore=0 

group by devices.name, products.family_name 

HAVING COUNT(*) > 1