1

これが正しく行われたかどうか、またはそれらのいくつかを改善する必要があるかどうかを教えてください。連想エンティティがある場合、クエリを理解するのに苦労しています。

ERD

すべての寄付者を一覧表示する

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

助けてくれたすべての人に感謝したいと思います。入力されたすべての回答が解決策を提供したので、全員に緑色のチェックマークを付けたいと思います. 助けていただきありがとうございます。いつか、あなたが将来持つかもしれない質問に貢献できるかもしれません.

4

4 に答える 4

2

ERD では、GIFT テーブルに主キーを配置することができます。年に寄付者ごとに 1 つのギフトしかない場合、主キーは DONOR と YEAR になります。それ以外の場合は、人工キーを追加することをお勧めします。

寄付者番号 106 と 125 の電話番号をリストします。WHERE 句で別のフィールドを使用する必要があると思います。これらの寄付者の電話番号 (dphone) を見つけることになっていますが、寄付者 ID は電話番号ではありません。

毎年寄付を行った寄付者を挙げてください - あなたの質問はあなたが望むものではないと思います. これにアプローチする方法は、寄付者と寄付した年のリストを作成し、寄付しなかった年を見つけることです。「寄付しなかった年」のリストにエントリがない寄付者は、毎年寄付した寄付者になります。ヒント: 外部結合の使用が含まれます。

共有してお楽しみください。

于 2010-08-06T16:32:23.400 に答える
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 は常に)

于 2010-08-06T16:34:48.547 に答える
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

毎年寄付をした寄付者をリストアップする

これは明確にする必要があります: 「毎年」とはどういう意味ですか?

于 2010-08-06T16:19:47.353 に答える
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
于 2010-08-06T16:26:44.233 に答える