2013-02-20 159 views
-1

初始表是這樣的SQL選擇具有相同的字段值的行

id name  count 
1 chocolate 5 
1 cheeze  3 
2 pepperoni 2 
2 potatoes 1 
2 cheese  7 
3 dirty sock 2 

我想要的是選擇具有不同的ID,但具有相同的名稱的行。換句話說,將在更多食譜中使用的成分

+0

那麼只需按名稱選擇?我一定是誤解了這個問題。在你的例子中, – 2013-02-20 04:56:44

+0

所有名稱都不相同,即使是'cheese'!='cheeze'。你能舉出更詳細的例子嗎? – mvp 2013-02-20 05:04:30

回答

1

首先將您的唯一ID,名稱對作爲子查詢,然後按名稱彙總結果。

select name, COUNT(*) as count 
from (
    select distinct id, name 
    from mytable) as sq 
group by name 
+0

或者, SELECT t1.id FROM myTable t1,myTable t2 WHERE t1.name LIKE t2.name AND t1.id!= t2.id; – user2089674 2013-02-20 04:59:44

+0

本來是甜的,但配方表沒有列出的成分 – morgred 2013-02-20 05:15:43

+0

這很奇怪,但是這個被接受的答案不同意這個問題,甚至沒有接近:[SQLFiddle](http://www.sqlfiddle.com/#! 3/506d8/8) - 它顯示整體使用過的成分。有問題,你要求重複。 – mvp 2013-02-20 05:21:43

0

試過在以上評論中發帖,格式化並不完全;這也適用:

SELECT t1.id FROM myTable t1, myTable t2 
    WHERE t1.name LIKE t2.name AND t1.id != t2.id; 
+1

我以爲他在尋找食譜(id)中最常發生的成分(名稱)。這是如何解決他的問題的? – pyrospade 2013-02-20 05:10:12

+0

正如男人所說 – morgred 2013-02-20 05:16:18

1

如果我理解正確,你想按名稱選擇重複。在你的例子中,如果你使用了相同的拼寫,應該是cheese(但你沒有 - 是否錯誤?)。

假設我是正確的,這應該工作(SQLFiddle DEMO):

SELECT * FROM mytable 
WHERE [name] IN (
    SELECT [name] 
    FROM mytable 
    GROUP BY [name] 
    HAVING count(*) > 1 
) 
+0

是的,你說得對 – morgred 2013-02-20 05:17:14

0

選擇的名稱,數(ID)按名稱 組used_in_recipes從成分 ;

我們真的需要檢查一個不同的ID嗎? 爲什麼我需要在配方中重複相同的成分?

讓我們按名稱對它們進行分組。

相關問題