组复制的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初学者
答
不,你必须指定要拉哪个表从是否有重复的列名,否则你会得到一个错误。当然,您可以指定两者: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
注意,我做了一些其他修改您的查询:
- 取代了隐式连接(
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的快捷方式。
一些示例数据和预期结果将有助于澄清你正在尝试做什么... – 2013-02-20 17:10:26
它用结果/样本数据进行编辑 – user977151 2013-02-20 17:31:26