2011-04-08 3 views
1

데이터베이스의 스키마는 다음과 같습니다. http://i.stack.imgur.com/omX60.png쿼리 작성 (스키마 제공)

자격이 가장 적은 회사는 어느 것입니까?

내 대답이 얼마나 잘못 되었습니까?

select top 1 companyName 
serialNumber_tbl as sn, Entitlement_tbl as ent, Company_tbl as c 
where sn.serialNumberId = ent.serialNumberId 
and c.companyId = sn.companyId 
order by count(distinct entitlementId) asc 
group by companyName 

감사합니다.

답변

1

거의 맞습니다. FROM 키워드가 누락되어 GROUP BYORDER BY 앞에 와야합니다.

select top 1 companyName 
from serialNumber_tbl as sn, Entitlement_tbl as ent, Company_tbl as c 
where sn.serialNumberId = ent.serialNumberId 
and c.companyId = sn.companyId 
group by companyName 
order by count(distinct entitlementId) asc 
1
select top 1 companyName 
**from** serialNumber_tbl as sn, Entitlement_tbl as ent, Company_tbl as c 
where sn.serialNumberId = ent.serialNumberId 
and c.companyId = sn.companyId 
group by companyName 
order by count(distinct entitlementId) asc 
1

다른 답변이 제대로 누락 된 from 키워드와 group byorder by 조항의 순서가 잘못을 지적했다. 거기에있는 조언을 따르는 것에는 아무런 문제가 없어야합니다.

다른 하나는 테이블을 조인하는 데 사용하는 구문입니다. 기술적으로 실수는 아니지만 오래된 것으로 간주됩니다. 새로운 표준은 조인을위한 전용 키워드를 제공합니다. 이전의 표준에 따라 이전에는 하나의 절인 WHERE 절에서 혼합되어야하는 값별 필터링 논리에서 조인 논리를 분리 할 수 ​​있습니다.

FROMWHERE 절을 다시 작성하여 보여 주므로 차이점을 확인할 수 있습니다. WHERE 절에

FROM serialNumber_tbl AS sn, 
    Entitlement_tbl AS ent, 
    Company_tbl AS c 
WHERE sn.serialNumberId = ent.serialNumberId 
    AND c.companyId = sn.companyId 

두 조건이 모두 조인 조건은 다음과 같습니다 첫째, 여기에 현재 가입 로직 구현입니다. 여기에 동일한 코드 조각이 새로운 구문을 수행 변경할 때 방법은 다음과 같습니다

FROM serialNumber_tbl AS sn 
    INNER JOIN Entitlement_tbl AS ent ON sn.serialNumberId = ent.serialNumberId 
    INNER JOIN Company_tbl AS c ON c.companyId = sn.companyId 

WHERE 절은 물론, 완전히 사라지고이 경우,하지만 당신은 항상 그런 있다는 잘못된 인상을하지 말았어야 . 일반적으로 WHERE 절은 유효하고 유용합니다. 합류 논리에 속하지 않은 다른 조건이 포함되어 있다면 그들은 WHERE 절에 해당 위치를 유지합니다. 나는 ent.Date < '19900101' AND c.CompanyName NOT IN ('IBM', 'Microsoft')과 같은 조건에 대해 이야기하고 있습니다.

앞에서 말했듯이, 현재 사용중인 이전 구문의 경우 조건은 조인 조건이있는 하나의 절이됩니다. 더 간단한 경우에는 문제없이 간과 할 수 있지만 복잡한 쿼리에서는 유지 관리 측면에서 악몽이 아니라해도 문제가 될 수 있습니다. 따라서 복잡한 쿼리를 작성하기 전에 최신 구문에 익숙해지는 것이 중요합니다.

+0

고마워요! 나는 새로운 것을 배웠다 =) – Donut