2015-05-29 55 views
0

在下面的查詢中,我拉出了特定作業上的申請人列表。無論我GROUP BY如何,它或者給我的用戶都是同一個用戶,但是每個應用程序的數據都不相同,或者我爲每個用戶返回4行。GROUP BY導致不良結果

我剛開始進入關係數據庫設計,所以我假設我把它設置錯了。我將申請人和申請分開,現在我正在努力分組數據。除非我只需要一個子查詢,group_concat,或者只是使用GROUP BY不正確?

SELECT 
    applicants.*, applications.*, users.* 
FROM applicants 
    INNER JOIN applications ON applicants.job_id = applications.job_id 
    INNER JOIN users ON applicants.user_id = users.user_id 
WHERE 
    applicants.job_id = 56 AND applicants.process_level = 1 
GROUP BY applications.app_id 

表:申請人

+-----+--------+---------+--------+--------------------+---------------+ 
| id | job_id | user_id | app_id |   applied_on | process_level | 
+-----+--------+---------+--------+--------------------+---------------+ 
| 1 |  56 |  125 |  5 |2015-05-24 19:28:55 |    1 | 
| 2 |  22 |  15 |  6 |2015-05-25 16:38:24 |    2 | 
| 3 |  56 |  100 |  7 |2015-05-26 13:38:24 |    1 | 
+-----+--------+---------+--------+--------------------+---------------+ 

表:應用

+---------+--------+---------+--------------+-------------+ 
| app_id | job_id | user_id | experience | location | 
+---------+--------+---------+--------------+-------------+ 
|  5 |  56 |  125 | bibendum jus |  suscipi | 
|  6 |  22 |  15 | Morbi vitae |  aliquet | 
|  7 |  56 |  100 | Duis et ex a | convallis | 
+---------+--------+---------+--------------+-------------+ 

表:用戶

+---------+-----------------+------------+-----------+ 
| user_id |  user_email | first_name | last_name | 
+---------+-----------------+------------+-----------+ 
|  15 | [email protected] |  Joe | Shcomo | 
|  100 | [email protected] |  Sally |  Smith | 
|  125 | [email protected] |  John |  Doe | 
+---------+-----------------+------------+-----------+ 

所需的結果:例如我想要job_id爲56的用戶125的單行,其中包含來自申請人,應用程序和用戶的所有數據。 (未表示當然所有數據):

+---------+------------+-----------+---------------+---------------------+ 
| user_id | first_name | location | process_level |   applied_on | 
+---------+------------+-----------+---------------+---------------------+ 
|  125 |  John | suscipi |    1 | 2015-05-24 19:28:55 | 
|  100 |  Sally | convallis |    1 | 2015-05-26 13:38:24 | 
+---------+------------+-----------+---------------+---------------------+ 
+0

也許你根本不需要'group by'。 –

+2

'applicants。*,applications。*,users。*'不適合'GROUP BY',既然你沒有要求任何聚合值,你不需要分組 –

+2

我可能錯過了它,但是我不確定你是否真的說出你想要做的事情。 –

回答

1

首先,在規範化記:你不應該存儲作業ID,並在申請人和申請表都USER_ID。可能的話,你只需要他們在'申請'表中,因爲我可以從申請人=>申請去確定這些信息。通過將這些關係存儲在兩個表格中,您可以打開自己的異常,而您不會喜歡這些異常。這就是說,你不需要任何東西組合。用戶和應用程序之間存在一致的關係,您可以使用已有的JOIN。我加強了這些連接使用USER_ID,JOB_ID和APP_ID被applicationsapplicants之間相關的列:這SQL Fiddle工作很大

SELECT u.user_id, u.first_name, a.location, ap.process_level, ap.applied_on 
FROM users u 
JOIN applications a ON a.user_id = u.user_id 
JOIN applicants ap ON ap.user_id = a.user_id AND ap.app_id = a.app_id AND ap.job_id = a.job_id 
WHERE ap.job_id = 56 AND ap.process_level = 1; 

+0

這是完全有道理的 - 並且像魅力一樣工作。謝謝你的幫助。 – Klav