2010-08-06 65 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」; 

列出姓氏是威廉姆斯和住在雅典的捐助者的名字,GA

SELECT dfname, dlname 
FROM donor 
WHERE dlname = 「Williams」 
AND city = 「Athens」 
AND state = 「GA」; 

我想感謝每一位幫助過我的人,我希望我可以給每個人一個綠色的複選標記,因爲所有輸入的答案都提供了一個解決方案。我很感激幫助,也許有一天我可以爲您未來的問題做出貢獻。

+0

在第三個,'AND'應該是'OR'。另外,WHERE子句中的那兩個比較應該與主鍵而不是dphone相對。 – David 2010-08-06 16:21:40

+0

謝謝大家的幫助,我真的很感激。 – 2010-08-09 23:14:00

回答

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)); 

(假設禮品一行意味着捐贈製成,即量> 0總是)

+0

經過測試並在MySQL 5.1上工作。想法如下: 如果捐贈者每年捐款,那麼捐贈者沒有捐獻的年份不存在。因此這兩個NOT EXISTS子查詢。 – mwittrock 2010-08-06 20:01:59

+0

謝謝你的解釋 – 2010-08-09 23:16:55

1

修正查詢:

列表的捐助者數量106的電話號碼和125

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

名單由各捐助國每年給予

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

列出捐贈的金額誰每年都會捐款

這應該澄清:什麼是「每年」的意思?

1

名單誰作出了捐贈每年

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

在您的ERD捐助者你可能想要把你的禮物表的主鍵。如果每個捐贈者每年只有一份禮物,那麼主要關鍵字可以是捐贈者和年份。否則,添加人工密鑰將是一個好主意。

列出捐助者號碼106和125的電話號碼 - 我想你想在WHERE子句中使用不同的字段。你應該找到這些捐助者的電話號碼(dphone),但捐助者ID不是電話號碼。

列出每年捐款的捐助者 - 我認爲您的查詢不會按照您的要求進行。解決這個問題的一個辦法是製作一份捐助者名單和他們提供的年份,然後找出他們未提供的年份。在「他們沒有提供的年份」名單中沒有任何參賽作品的捐贈者將是每年捐贈的名單。提示:涉及使用外部連接。

分享和享受。誰取得了每年捐款(:未測試的警告):

+0

非常感謝你 – 2010-08-09 23:15:51