2017-05-07 62 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