我有这两张桌子:
主人(专业,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的初学者
答案 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
请注意,我对您的查询进行了一些其他更改:
student, master
)替换隐式联接(master join student
)。group by
和distinct
...我不相信他们对您要做的事情是必要的。m
和s
)。最后一个建议......出于各种原因使用select *
被广泛认为是不好的做法......所以即使你想要做的事情有一条捷径,it would be best to list out all of your columns for other reasons
答案 1 :(得分:0)
不,如果存在重复的列名,则必须指定要从哪个表中提取,否则您将收到错误。当然,您可以指定两者:SELECT master.SID,student.SID。