나는 다음과 같은 쿼리가 :이 중첩 쿼리의 다른 방법은 무엇입니까?
SELECT t.assignment_id,
t.timesheet_id,
t.hours,
(SELECT SUM(tss.hours) FROM timesheets tss
WHERE tss.assignment_id = t.assignment_id) as 'sumhours'
FROM timesheets t
산출 :
assignment_id | timesheet_id | hours | sumhours
---------------------------------------------------------
2 2 4.50 8.00
2 3 3.50 8.00
3 4 0.00 0.00
3 5 0.00 0.00
테이블 정의 : 그래서
'timesheets' (
'timesheet_id' int(11) AUTO_INCREMENT,
'hours' decimal(10,2),
'assignment_id' int(11),
PRIMARY KEY ('timesheet_id'),
CONSTRAINT 'assignment_fk' FOREIGN KEY ('assignment_id') REFERENCES 'assignments' ('assignment_id') ON DELETE CASCADE ON UPDATE CASCADE
)
당신은 내가 기록 된 시간의 수를 표시하기 위해 노력하고 있음을 볼 수 있습니다 각 과제의 총 시간 수 옆에있는 각 작업 표에 하나의 과제에는 많은 시간표가있을 수 있습니다. 이것을 달성하는보다 효율적인 방법이 있습니까?
을 (MySQL은 적용되지 않습니다,하지만 대부분의 다른 현대의 RDBMS는이) 알려 : 그냥 합계가 필요한 경우, 당신은 할 수 있습니다. SQL 문은 훨씬 더 멋지게 보입니다. 편집 : BTW, 그냥 참고, MySQL 지원하지 않습니다 – cha
나는 지금 MySQL을 사용하여 붙어있다 :/ –
원하는 DDLs 및/또는 sqlfiddle 함께 원하는 결과 집합을 제공하는 것이 좋습니다. 상관 관계가있는 서브 쿼리는 관련성이없는 등가물보다 거의 항상 효율적입니다. – Strawberry