如何在不使用group by语句的情况下选择不同的行

coo*_*_cs 12 mysql sql

A B C
1 1 1 
1 1 1 
2 2 2 
2 2 2 
3 3 3 
3 3 3 
4 4 4 
4 4 4 
5 5 5 
5 5 5 
5 5 5 
6 6 6
6 6 6 
Run Code Online (Sandbox Code Playgroud)

我只输出不同的行而不使用group by语句.我不能使用group by因为它使mysql挂起.所以它应该回归

1 1 1
2 2 2 
3 3 3 
4 4 4 
5 5 5 
6 6 6 
Run Code Online (Sandbox Code Playgroud)

我正在使用DISTINCT进行内部联接.这也不起作用:

SELECT DISTINCT * FROM TABLEA inner join TABLEB on TABLEA.A = TABLEB.A 
Run Code Online (Sandbox Code Playgroud)

Jer*_*NER 14

SELECT DISTINCT A,B,C FROM TABLE;
Run Code Online (Sandbox Code Playgroud)

根据mysql文档,DISTINCT指定从结果集中删除重复的行(http://dev.mysql.com/doc/refman/5.0/en/select.html)

我在jsfiddle上创建了一个示例,它可以运行恕我直言

create table tablea (A int,B int,C int);
create table tableb (A int);

INSERT INTO tablea VALUES (1,1,1),(1,1,1),(2,2,2),(2,2,2),(3,3,3),(3,3,3),(4,4,4),(4,4,4),(5,5,5),(5,5,5),(5,5,5),(6,6,6),(6,6,6);
INSERT INTO tableb VALUES (1),(1),(1),(1),(1);

SELECT DISTINCT tablea.A,tablea.B,tablea.C FROM tablea INNER JOIN tableb ON tablea.A=tableb.A;
Run Code Online (Sandbox Code Playgroud)

随意尝试这个SQLFiddle.

  • 你有多少列?如果您的列具有唯一ID,则SELECT DISTINCT*FROM TABLE通常会为您提供所有原始行.请在您的问题中澄清这一点. (3认同)

Rol*_*DBA 9

这可能会让你感到震惊,但MySQL使用GROUP BY来执行DISTINCT!

这是你可能想要尝试的东西

如果调用该表mytable,请执行以下两项操作:

首先运行这个

ALTER TABLE mytable ADD INDEX ABC (A,B,C);`
Run Code Online (Sandbox Code Playgroud)

其次,运行此查询

SELECT A,B,C FROM mytable GROUP BY A,B,C;
Run Code Online (Sandbox Code Playgroud)

GROUP BY实际上在索引存在时效果更好!!!

以下是证明其有效的示例代码

mysql> drop database if exists cool_cs;
Query OK, 1 row affected (0.04 sec)

mysql> create database cool_cs;
Query OK, 1 row affected (0.00 sec)

mysql> use cool_cs
Database changed
mysql> create table mytable
    -> (A int,B int,C int, key ABC (A,B,C));
Query OK, 0 rows affected (0.08 sec)

mysql> INSERt INTO mytable VALUES
    -> (1,1,1),(1,1,1),(2,2,2),(2,2,2),(3,3,3),
    -> (3,3,3),(4,4,4),(4,4,4),(5,5,5),(5,5,5),
    -> (5,5,5),(6,6,6),(6,6,6);
Query OK, 13 rows affected (0.06 sec)
Records: 13  Duplicates: 0  Warnings: 0

mysql> select a,b,c FROM mytable group by a,b,c;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    1 |    1 |    1 |
|    2 |    2 |    2 |
|    3 |    3 |    3 |
|    4 |    4 |    4 |
|    5 |    5 |    5 |
|    6 |    6 |    6 |
+------+------+------+
6 rows in set (0.02 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

试试看 !!!