2014-10-18 169 views
1

如何使用名稱查找表的ID?SQL選擇名稱的ID

我的數據庫架構BOLD裝置PRIMARY KEY,ITALIC裝置外鍵

階段(stage_id,took_place,start_loc,end_loc,距離)
騎手(rider_id,姓名,year_born)
結果(stage_id,rider_id, time_seconds)

問題:如果弗雷德布拉德利贏得了參觀。找到在至少4個階段擊敗他的車手,即在21個階段中至少有4個比布拉德利時間更好的車手。 我按照以下方法完成。但我不知道如何使用名稱檢索騎手ID。

select rider.name 
from Results res, Results res2, Riders rider 
where rider.name like '%Bradley%' and res.stage_id = res2.stage_id and res.time_seconds > res2.time_seconds 
    and res2.rider_id = rider.rider_id 
group by rider.name 
having count(*) >= 4 
order by name; 
+1

添加你在 – Ram 2014-10-18 08:27:23

+0

使用的數據庫添加無論是Oracle或SQL Server或MySQL – Ram 2014-10-18 08:30:35

+0

不好意思,我正在使用Oracle,我已經添加了我的數據庫架構 – XGAl 2014-10-18 08:31:26

回答

1

在where子句將返回弗雷德·布拉德利的結果是沒有問題問什麼是

rider.name like '%Bradley%

在至少4個階段中擊敗他的車手

嘗試

select rider.name 
from Results res 
join Results res2 
on res.stage_id = res2.stage_id and res.time_seconds > res2.time_seconds and res.rider_id = (select r.rider_id from rider r where r.name = 'Fred Bradley') 
join Riders rider 
on res2.rider_id = rider.rider_id 
group by rider.name 
having count(*) >= 4 
order by name; 
+0

現在運轉正常,謝謝! – XGAl 2014-10-18 08:57:14

+0

歡迎您:) – Ram 2014-10-18 09:12:32

1

你可以只添加idselectgroup by列表:

SELECT rider.id, rider.name 
FROM  Results res, Results res2, Riders rider 
WHERE rider.name LIKE '%Bradley%' AND 
     res.stage_id = res2.stage_id AND 
     res.time_seconds > res2.time_seconds AND 
     res2.rider_id = rider.rider_id 
GROUP BY rider.id, rider.name 
HAVING COUNT(*) >= 4 
ORDER BY name;