2010-08-06 3 views
1

이 작업이 올바르게 완료되었는지 또는 일부 작업을 개선해야하는 경우 연관 엔티티가있을 때 쿼리를 이해하는 데 어려움이 있음을 알 수 있습니까?ERD 및 SQL 쿼리가 도움이됩니까?

ERD http://img706.imageshack.us/img706/3796/newbitmapimageun.jpg

목록 모든 기증자

SELECT* from Donor; 

목록 모든 기증자

SELECT dfname, dlname 
FROM donor 

목록의 이름과 성 전화 기증자 번호 (106)의 번호와 125

SELECT dphone 
FROM DONOR 
WHERE dphone = “106” 
AND dphone = “125”; 

목록

SELECT year 
FROM YEAR IN (
SELECT donor, amount 
FROM GIFT); 

목록에 기부 매년

SELECT dfname, dlname 
FROM DONOR 
WHERE IN(SELECT * FROM 
YEAR) 
AND amount != null; 

목록 조지아 또는 노스 캐롤라이나

에 살고 기부자의 이름을 한 기증자를 매년 각 기증자에 의해 주어진 양
SELECT dfname, dlname 
FROM donor 
WHERE state = “GA” 
OR state = “NC”; 

성이 윌리엄스이고 아테네, 조지아에 거주하는 기증자의 이름을 나열하십시오.

SELECT dfname, dlname 
FROM donor 
WHERE dlname = “Williams” 
AND city = “Athens” 
AND state = “GA”; 

누구든지 도와 주신 모든 분들께 감사 드리며 모든 답변을 입력하면 모든 사용자에게 녹색 체크 표시가 나타나기를 바랍니다. 도움을 주셔서 감사 드리며 앞으로 언젠가는 내가 가질 수있는 질문에 공헌 할 수 있습니다.

+0

에서 세 번째는 'OR'이어야합니다. 또한'WHERE' 절의 두 비교는 'dphone'이 아닌 기본 키와 비교되어야합니다. – David

+0

도움 주셔서 감사합니다. 정말 고맙습니다. –

답변

2

기증자

SELECT dfname, dlname 
FROM DONOR 
WHERE NOT EXISTS 
    (SELECT * FROM YEAR WHERE NOT EXISTS 
     (SELECT * FROM GIFT WHERE year = YEAR.year AND donor = DONOR.donor)); 

은 (GIFT의 행이 기부되었다 의미 가정 즉, 그 금액 항상> 0)

+0

MySQL 5.1을 테스트하고 작업하고 있습니다. 아이디어는 다음과 같습니다. 매년 기부자가 기부를 한 경우 기증자가 기부하지 않은 연도가 없습니다. 따라서 두 개의 NOT EXISTS 하위 쿼리가 있습니다. – mwittrock

+0

설명해 주셔서 감사합니다. –

1

수정 쿼리 : 기증자 번호 (106)의

목록 전화 번호와 기증자

SELECT donor, year, sum(amount) as amount 
FROM gift 
group by donor, year 

목록 매년 각 기증자에 의해 주어진 125

SELECT dphone 
FROM DONOR 
WHERE donor in (106, 125) 

목록 양 자 매년 기부했다.

이것은 분명히해야합니다 : "매년"이란 무엇입니까?

1

목록은 ERD에서 기부금을 매년

Select dfname, dlastName 
    from 
    Donor d 
    INNER JOIN 
    (SELECT Donor, count(year) cyear 
    FROM DONOR d 
    INNER JOIN gift g 
    on d.donor = g.donor 
    GROUP BY donor 
) donorYear 
    ON d.donor = donorYear.donor 
    INNER JOIN 
    (SELECT count(year) cyear 
    from Year) years 
    on years.cyear = donarYear.cyear 
2

을 한 기증자는 당신은 당신의 선물 테이블에 기본 키를 넣어 할 수 있습니다. 기증자 당 1 기의 선물이 1 년이면 기본 키는 기한과 1 년이 될 수 있습니다. 그렇지 않으면 인공 키를 추가하는 것이 좋습니다.

기증자 번호 106과 125의 전화 번호를 나열하십시오 - WHERE 절에서 다른 필드를 사용하고자한다고 생각합니다. 이 기부자 (dphone)의 전화 번호를 찾아야하지만, 기증자 ID는 전화 번호가 아닙니다.

매년 기부 한 기부자를 나열하십시오. 귀하의 질문이 귀하가 원하는대로 처리 할 것이라고 생각하지 않습니다.이 문제에 접근하는 방법은 기부자 명단과 기부자 명부를 작성한 다음 제공하지 않은 기간을 찾아내는 것입니다. "기부하지 않은 기간"목록에 항목이없는 기부자는 매년 제출하는 기부자입니다. 힌트 : 외부 조인 사용.

공유하고 즐기십시오. 기부 매년 (: 테스트하지주의) : 만든

+0

고맙습니다. –