15
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 

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

1 1 1
2 2 2 
3 3 3 
4 4 4 
5 5 5 
6 6 6 

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

SELECT DISTINCT * FROM TABLEA inner join TABLEB on TABLEA.A = TABLEB.A 
4

4 回答 4

17
SELECT DISTINCT A,B,C FROM TABLE;

根据 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;

随意尝试这个SQLFiddle

于 2012-06-06T21:19:35.353 回答
9

这可能会让你大吃一惊,但 MySQL 在后台使用 GROUP BY 来执行 DISTINCT !!!

这是您可能想尝试的东西

如果表被调用mytable,请执行以下两件事:

首先运行这个

ALTER TABLE mytable ADD INDEX ABC (A,B,C);`

二、运行这个查询

SELECT A,B,C FROM mytable GROUP BY A,B,C;

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>

试试看 !!!

于 2012-06-06T21:34:40.970 回答
2

如果您(或其他任何人)真的想在不使用 DISTINCT 或 GROUP BY 语句的情况下获得不同的结果,则可能是这样:

SELECT
    a.name
FROM person a
LEFT JOIN person b
    ON (a.name = b.name OR (a.name IS NULL AND b.name IS NULL))
    AND a.id < b.id
WHERE b.id IS NULL

不过,这是一件相当古怪的事情。

于 2015-11-20T16:15:45.553 回答
1

DISTINCT 关键字可以满足您的需求。即,如果您的表的名称是 A,select distinct * from A则可以解决问题。

参照。mysql手册:http ://dev.mysql.com/doc/refman/5.0/en/select.html

于 2012-06-06T21:20:53.293 回答