1

私はこれらの2つのテーブルを持っています:

マスター(メジャー、SID、手数料)

Biology, 13578, $500
Physics, 12460, $400

学生 (メジャー、SID、fname、lname、startDate、lastDate)

Science, 73589, Steven, Archer, 2010-09-02, null
Biology, 13578, Stacy, Diaz, 2009-09-02, null
Sociology, 21749, Gavin, Wall, 2011-01-05, null
Physics, 12460, Pat, Dunn, 2012-09-02, null

すべての修士課程の学生の情報を専攻と学費でグループ化して表示するクエリを作成する必要があります。

私はこのようにしてみました:

select * from from master, student 
where master.SID=student.SID AND master.major=student.major 
group by student.SID;

ただし、これにより SID と主要な情報が 2 回表示されます。

Biology, 13578, Stacy, Diaz, 2009-09-02, null, Biology, 13578
Physics, 12460, Pat, Dunn, 2012-09-02, null, Physics, 12460

だから今私はこれを持っています:

select distinct student.sid, student.eid, fname, lname, startDate, lastDate, fee
from from master, student 
where master.SID=student.SID AND master.major=student.major 
group by student.SID;

これは次のようになります:

Biology, 13578, Stacy, Diaz, 2009-09-02, null
Physics, 12460, Pat, Dunn, 2012-09-02, null

しかし、選択するSIDまたはメジャーを指定しない方法があるかどうか疑問に思っています。すべてを選択したいのですが、重複を削除します。

これが簡単に思えたらごめんなさい、私はまだmysqlの初心者です

4

2 に答える 2

1

あなたの質問を理解できたら、したいのですがselect *、冗長な列を削除してください。

これは不可能ですが、 からすべての列を返し、 からstudent追加の列を追加することでショートカットを作成できますmaster

select s.*, m.fee
from
  master m
  join student s 
    on s.sid = m.sid
    and s.major = m.major

クエリにいくつかの変更を加えたことに注意してください。

  1. student, master暗黙的な結合 ( ) を明示的な結合 ( )に置き換えましたmaster join student
  2. group byand を削除しましたdistinct...あなたがやろうとしていることにはそれらが必要だとは思いません。
  3. テーブル エイリアス (mおよびs) を追加しました。

最後の提案...さまざまな理由で使用するのは悪い習慣だと広く考えられてselect *います...したがって、あなたがやろうとしていることへの近道があっても、他の列のためにすべての列をリストアップするのが最善です.理由

于 2013-02-20T17:41:59.107 に答える