2015-06-19 85 views
-2

我準備在數據庫中的考試,我偶然發現了這個問題:這是SQL查詢正確

我們有人力資源公司的數據庫,它包含了表:

Applicant(a-id,a-city,a-name)

Qualified(a-id,job-id) 

數據庫中有更多的表,但它們與我所問的問題無關。

的問題是:

我們要編寫顯示每對(作業ID,一個城市)誰是能夠勝任這項工作生活在城市的人的名字的查詢。

此查詢是否解決了該問題?爲什麼?

Select qualified.job-id, applicant.a-city, applicant.a-name 
from qualified, applicant 
where quailified.a-id=applicant.a-id 
group by qualified.job-id, applicant.a-city 

我個人認爲這個查詢很好。我找不到任何錯誤,但缺乏任何實際的方法來檢查它,也缺乏SQL的經驗,我希望有人幫助我確認這確實沒問題。

+3

爲什麼不設置一些測試數據並嘗試?這樣你就可以獲得需求的「感覺」以及查詢實際執行的功能。這就是我們如何做到的。你有一些測試數據>一個[SQLFiddle](http://sqlfiddle.com)'會讓我們很容易參與'。 –

+3

男孩那些連字符會讓我瘋狂誰設計的火車殘骸 – Drew

+0

某人在教學界,而不是數據庫開發人員! @DrewPierce – Martin

回答

0

我懷疑你需要選擇你想返回或比較每一個值,所以你還需要選擇applicant.a-id

Select qualified.job-id, applicant.a-id, applicant.a-city, applicant.a-name 
from qualified, applicant 
where quailified.a-id=applicant.a-id 
group by qualified.job-id, applicant.a-city 

我真的不愉快的GROUP BY這些,輸出將最初分組到不同的工作ID,然後每個工作ID將按城市分組,

我也覺得這個問題不是完美的措辭,就什麼實際輸出是必需的,但假設用戶可以選擇城市和工作,列出人員然後列出組織BYS實際上SELECTers:

Select qualified.job-id, applicant.a-id, applicant.a-city, applicant.a-name 
    from qualified, applicant 
    where quailified.a-id=applicant.a-id 
    AND qualified.job-id = ? AND applicant.a-city = ? ORDER BY applicant.a-name 

(我深知這不使用首選JOIN語法,但我不認爲OP需要它在這種情況下再:上述評論)。