2013-02-20 91 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吗? 为什么我需要在配方中重复相同的成分?

让我们按名称对它们进行分组。

相关问题