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

问题描述:

我有这些2个表:组复制的ID,但显示的信息的其余部分

主(主要的,SID,费)

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

学生(主要的,SID,FNAME,L-NAME,的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

一些示例数据和预期结果将有助于澄清你正在尝试做什么... – 2013-02-20 17:10:26

+0

它用结果/样本数据进行编辑 – user977151 2013-02-20 17:31:26

不,你必须指定要拉哪个表从是否有重复的列名,否则你会得到一个错误。当然,您可以指定两者:SELECT master.SID,student.SID。

如果我理解你的问题,你想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)。

最后一个建议......这被广泛认为是不好的做法,使用select *用于各种原因......所以即使有对你正在尝试做的,什么it would be best to list out all of your columns for other reasons的快捷方式。