2017-05-07 63 views
1

我想检索数据没有重复的记录..问题是重复的记录在所有列中除了名为seq_id的特定列有相似的值,所以我不能使用不同...我的选择必须已经seq_id ......这是代码需要检索不同的记录,但

SELECT x.seq_id, 
     y.name, 
     x.user, 
     x.time_1, 
     y.acc_num 
FROM table1 y, 
    table2 x 
WHERE y.c_id=x.m_id; 

结果看起来是这样的

╔════════════════════════════════════════════════════╗ 
║ Seq_id  |name  |user  |time  |acc_n ║ 
╠════════════════════════════════════════════════════╣ 
║ 100   jim.  Ali.  10:11:30 0098 ║ 
║ 101   jim.  Ali.  10:11:30 0098 ║ 
║ 102   john  sam  04:19:30 0097 ║ 
╚════════════════════════════════════════════════════╝ 

我希望它像

╔═════════════════════════════════════════╗ 
║ Seq_id |name |user |time  |acc_n ║ 
╠═════════════════════════════════════════╣ 
║ 100 jim. Ali. 10:11:30 0098 ║ 
║ 102 john sam  04:19:30 0097 ║ 
╚═════════════════════════════════════════╝ 
+1

为什么选择Seq_id = 100,而不是101? –

+0

选择哪一个并不重要..我只想要其中的一个 – user7977107

+0

您可以尝试在select中使用GROUP BY,然后包含您希望相同的列。有几种使用HAVING子句的变体也可以删除重复项。尝试谷歌搜索'sql选择无重复' – hvanbrug

回答

5

“不要紧,选择哪个[seq_id] ..我只是希望他们的一个”

在这种情况下,简单的聚合将解决这个给你。

SELECT min(x.seq_id) as seq_id, 
     y.name, 
     x.user, 
     x.time_1, 
     y.acc_num 
FROM table1 y, 
    table2 x 
WHERE y.c_id=x.m_id 
group by y.name, 
     x.user, 
     x.time_1, 
     y.acc_num; 
1

首先,请避免使用旧的连接语法。改为使用INNER JOIN

现在除了由APC回答的小组之外,还可以使用分析功能来实现相同的功能。

Select * from 
(SELECT x.seq_id, 
     y.name, 
     x.user, 
     x.time_1, 
     y.acc_num, 
     Row_number() over (partition by 
     y.name, x.user, x.time_1,y.acc_num 
     order by x.seq_id) as rno 
FROM 
    table1 y 
    INNER JOIN 
    table2 x 
    ON y.c_id=x.m_id 
) where rno=1 
+0

我会尽力解决..谢谢大家..快乐向你学习...... – user7977107

0
select x.seq_id, y.name, x.user1, x.time_1, y.acc_num 
from table20 x, table21 y 
where x.seq_id = y.seq_id 
and x.seq_id = (select max(x1.seq_id) 
from table20 x1, table21 y1 
where x1.seq_id = y1.seq_id 
and y.name = y1.name 
and x.user1 =x1.user1 
and x.time_1=x1.time_1 
and y.acc_num=y1.acc_num) 
+0

非常感谢你 – user7977107