2016-12-23 73 views
0

我有兩個表issuestime_entries他們有one-to-many他們之間的關聯。我們可以爲issue創建多個time_entries如何避免一對多關聯中的重複記錄而不使用不同的記錄?

這裏是一些示例數據,

問題

id | subject | description 
------------------------------ 
1 | test  | test 
2 | test1 | test1 
3 | test2 | test2 

時間條目

id | issue_id | hours | spent_on | created_on 
--------------------------------------------------- 
1 | 1  | 2  | 2016-12-23 | 2016-12-23 
2 | 1  | 2  | 2016-12-23 | 2016-12-23 
3 | 2  | 3  | 2016-12-23 | 2016-12-23 
4 | 2  | 5  | 2016-12-23 | 2016-12-23 
5 | 4  | 4  | 2016-12-23 | 2016-12-23 

現在我想獲取所有這些都經過特別花費的時間issues日期。

SELECT * 
FROM "issues" 
INNER JOIN "time_entries" ON "time_entries"."issue_id" = "issues"."id" 
WHERE time_entries.created_on > '2016-12-22' 

它返回多個記錄爲issues其中有多個條目。

id | subject | description 
----------------------------- 
1 | test  | test 
1 | test  | test 
2 | test1 | test1 
2 | test1 | test1 
3 | test2 | test2 

如何在不使用distinct的情況下避免這些重複記錄。由於技術原因,我無法使用distinct

任何幫助將不勝感激。

+0

你正在使用哪個數據庫,MySQL或Postgres?他們彼此很不相同。 –

回答

2

一種選擇是使用SELECT DISTINCT

SELECT DISTINCT t1.id, 
       t1.subject, 
       t1.description 
FROM issues t1 
INNER JOIN time_entries t2 
    ON t2.issue_id = t1.id 
WHERE t2.created_on > '2016-12-22' 

如果您不能使用DISTINCTGROUP BY,那麼另外一個選擇是使用它彙集了問題的time_entries表的子查詢和確定哪些問題符合要求。這樣的事情:

SELECT t1.id, 
     t1.subject, 
     t1.description 
FROM issues t1 
INNER JOIN 
(
    SELECT issue_id 
    FROM time_entries 
    GROUP BY issue_id 
    HAVING SUM(CASE WHEN created_on > '2016-12-22' THEN 1 ELSE 0 END) > 0 
) t2 
    ON t2.issue_id = t1.id 
+0

由於我的應用程序中存在一些技術問題,我無法使用「distinct」或「group by」。 –

+0

@RamizRaja我給你一個選項,它不需要這些。 –

+0

只是好奇,postgres有'存在'嗎? – Prisoner

0
SELECT * FROM "issues" 
INNER JOIN "time_entries" ON "time_entries"."issue_id" = "issues"."id" 
WHERE time_entries.created_on > '2016-12-22' 
group by id 
+1

這隻適用於特定版本的MySQL,即使這樣也不是很理想,因爲你不會爲每個'id'值選擇某個_which_記錄。 –

相關問題