2012-01-08 118 views
1

这应该很简单,但我找不到使用搜索的正确语法。mysql与其他东西不同

我:

SELECT distinct name, id FROM table1 WHERE length<6; 

我想(反正不是明显的标识,因为这就是一个自动增量)返回的ID和名称都不同的名称,但此查询目前返回所有名称和ID,不只是不同的名称...

这是做什么正确的方法?

编辑:长度是另一个列的名称,在这里没有特别的相关。

+1

你拿“长度<6”预选赛......一个名字的长度期待,是它的另一个或者只是6个不同的名称,否则你只需要使用“LIMIT 6” – DRapp 2012-01-08 12:57:58

+1

,所以如果你有一个名为'john smith'的ID = 1和名称为'john smith'的ID = 7,你会希望看到约翰史密斯一次......你会关心什么是身份证返回?让我们更精确...因此,如果使用上面的话,下面的答案会被接受:7约翰史密斯。即使也有一个约翰史密斯 – xQbert 2012-01-08 13:00:45

+0

@drapp - 它是另一列。 @ xQbert - 第一个出现在该名称表中的ID ... – David19801 2012-01-08 13:06:38

回答

2

所以,它听起来就像你想要不同的名称,并任何关联的ID。 DISTINCT将返回不同的行作为所选列的组合,并且由于id是自动递增的,这意味着所有行。而是使用聚合。

这个查询将返回名称,第一个自动递增id它:

SELECT 
    name, 
    MIN(id) as id 
FROM table1 
WHERE length < 6 
GROUP BY name 
+0

+1因为我认为这是正确的路径; – xQbert 2012-01-08 13:04:34

+0

@xQbert:OP评论:*“它是另一列......“* – 2012-01-08 13:06:04

+0

@ypercube不在我发布的时间。但我在5分钟内修复了它:D – xQbert 2012-01-08 13:10:15

2

不同的名称:

SELECT DISTINCT name 
FROM table1 
WHERE length < 6 

不同的名称和他们的所有ID:

SELECT name, GROUP_CONCAT(id) 
FROM table1 
WHERE length < 6 
GROUP BY name 

不同的名称和最低ID:

SELECT name, MIN(id)    --- or MAX(id) for the highest id 
FROM table1 
WHERE length < 6 
GROUP BY name 

不同的名称和(或多或少)随机ID(这只适用于MySQL,没有其他DBMS):

SELECT name, id    
FROM table1 
WHERE length < 6 
GROUP BY name 
+0

但我仍然想要返回与每个不同名称一起使用的id列值... – David19801 2012-01-08 12:57:53

+0

那么,如果'name'有很多'id'呢?哪一个应该被选中? – 2012-01-08 12:59:18

+0

啊我看...好问题。现在我明白了为什么mysql不喜欢它。我猜这个名字的第一个实例的ID? – David19801 2012-01-08 13:02:02

0

选择ID,从表1与T0加入 (选择从表1明确的名称)作为t0.name = t1.name T1 名称;

0

也许你的意思是

where length(name) < 6