组复制ID,但显示其余信息

时间:2013-02-20 17:05:47

标签: mysql

我有这两张桌子:

主人(专业,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和主要信息显示两次:

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的初学者

2 个答案:

答案 0 :(得分: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 bydistinct ...我不相信他们对您要做的事情是必要的。
  3. 添加了表别名(ms)。
  4. 最后一个建议......出于各种原因使用select *被广泛认为是不好的做法......所以即使你想要做的事情有一条捷径,it would be best to list out all of your columns for other reasons

答案 1 :(得分:0)

不,如果存在重复的列名,则必须指定要从哪个表中提取,否则您将收到错误。当然,您可以指定两者:SELECT master.SID,student.SID。