假设我有一个以这种方式构建的表格:
Column1 Column2 Column3
a E f
b E g
c r h
d E i
我想获得两行:
a E f
c r h
因为我不想占用Column2值重复的行,特别是我不关心要重复哪一行,所以第一行适合。
我认为执行此查询会有效,但事实并非如此:
select * from db group by Column2 having column2 != ''
因为我获得完全相同的行
这是真实的例子
Tabe: mydb
Columns:
id int(11) AI PK
client varchar(45)
birth datetime
email varchar(45)
phone varchar(45)
id client birth email phone
'1', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '57576765767'
'2', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '45646456546'
'3', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '35435353553'
'4', 'test', '2017-08-12 00:00:00', 'test1@r.com', '12313212313'
'5', 'test', '2017-08-12 00:00:00', 'test4@r.com', '23424234234'
查询: 通过电子邮件选择* mydb组
结果:与之前相同
答案 0 :(得分:0)
SELECT DISTINCT Column2, Column1, Column3
FROM db
GROUP BY Column2
可能会这样做
- 编辑 -
忘了GROUP BY
!
---编辑2 ---
create table mydb (id int(11) Primary key AUTO_increment,
client varchar(45),
birth datetime,
email varchar(45),
phone varchar(45));
INSERT INTO mydb VALUES
('1', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '57576765767'),
('2', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '45646456546'),
('3', 'test', '2017-08-12 00:00:00', 'aaa@gmail.com', '35435353553'),
('4', 'test', '2017-08-12 00:00:00', 'test1@r.com', '12313212313'),
('5', 'test', '2017-08-12 00:00:00', 'test4@r.com', '23424234234');
SELECT DISTINCT email, client, birth, phone
FROM mydb
GROUP BY email;
# email, client, birth, phone
aaa@gmail.com, test, 2017-08-12 00:00:00, 57576765767
test1@r.com, test, 2017-08-12 00:00:00, 12313212313
test4@r.com, test, 2017-08-12 00:00:00, 23424234234
答案 1 :(得分:0)
试试这个:
这将仅使用组中具有最小ID的值来获取与不同电子邮件匹配的数据。如果您想要最大ID,可以将最小值更改为最大值。
注意:id应该是唯一的
<强>查询强>:
select * from mydb where id IN( select min(id) from mydb group by email )