1

我有这两张桌子:

master(专业、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 的初学者

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. 添加了表别名(ms)。

最后一个建议......由于各种原因,它被广泛认为是不好的做法select *......所以即使你想要做的事情有捷径,最好列出你的所有列以供其他人使用原因

于 2013-02-20T17:41:59.107 回答
0

不,如果有重复的列名,您必须指定从哪个表中提取,否则您会收到错误消息。当然,您可以同时指定两者:SELECT master.SID、student.SID。

于 2013-02-20T17:09:13.007 回答