这应该很简单,但我找不到使用搜索的正确语法。mysql与其他东西不同
我:
SELECT distinct name, id FROM table1 WHERE length<6;
我想(反正不是明显的标识,因为这就是一个自动增量)返回的ID和名称都不同的名称,但此查询目前返回所有名称和ID,不只是不同的名称...
这是做什么正确的方法?
编辑:长度是另一个列的名称,在这里没有特别的相关。
这应该很简单,但我找不到使用搜索的正确语法。mysql与其他东西不同
我:
SELECT distinct name, id FROM table1 WHERE length<6;
我想(反正不是明显的标识,因为这就是一个自动增量)返回的ID和名称都不同的名称,但此查询目前返回所有名称和ID,不只是不同的名称...
这是做什么正确的方法?
编辑:长度是另一个列的名称,在这里没有特别的相关。
所以,它听起来就像你想要不同的名称,并任何关联的ID。 DISTINCT
将返回不同的行作为所选列的组合,并且由于id
是自动递增的,这意味着所有行。而是使用聚合。
这个查询将返回名称,第一个自动递增id
它:
SELECT
name,
MIN(id) as id
FROM table1
WHERE length < 6
GROUP BY name
不同的名称:
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
但我仍然想要返回与每个不同名称一起使用的id列值... – David19801 2012-01-08 12:57:53
那么,如果'name'有很多'id'呢?哪一个应该被选中? – 2012-01-08 12:59:18
啊我看...好问题。现在我明白了为什么mysql不喜欢它。我猜这个名字的第一个实例的ID? – David19801 2012-01-08 13:02:02
选择ID,从表1与T0加入 (选择从表1明确的名称)作为t0.name = t1.name T1 名称;
也许你的意思是
where length(name) < 6
你拿“长度<6”预选赛......一个名字的长度期待,是它的另一个或者只是6个不同的名称,否则你只需要使用“LIMIT 6” – DRapp 2012-01-08 12:57:58
,所以如果你有一个名为'john smith'的ID = 1和名称为'john smith'的ID = 7,你会希望看到约翰史密斯一次......你会关心什么是身份证返回?让我们更精确...因此,如果使用上面的话,下面的答案会被接受:7约翰史密斯。即使也有一个约翰史密斯 – xQbert 2012-01-08 13:00:45
@drapp - 它是另一列。 @ xQbert - 第一个出现在该名称表中的ID ... – David19801 2012-01-08 13:06:38