【问题标题】:Retrieve information from two different tables从两个不同的表中检索信息
【发布时间】:2012-11-08 20:30:17
【问题描述】:

我目前是 SQL 语言的新手,我正在努力理解如何从下表中检索正确的信息:

员工表

+------+----------+---------+-----------------+------+------+
| s_id | initials | s_name  | pos             | qual | d_id |
+------+----------+---------+-----------------+------+------+
| AA   | A.       | Tom     | Lecturer        | PhD  | RELI |
| BBB  | J.J.     | Jason   | Senior Lecturer | PhD  | RELI |
| CCC  | B.A.     | Andy    | Senior Lecturer | PhD  | BIOL |
| DD   | M.       | Mark    | Professor       | PhD  | BIOL |
| EE   | W.       | Alen    | Professor       | BA   | BIOL |
+------+----------+---------+-----------------+------+------+

研究表

+------+-------+------------+-----------+
| s_id | r_id  | str_date   | fin_date  |
+------+-------+------------+-----------+
| BBB  | RESH1 |       1990 |      1998 |
| BBB  | RESH2 |       1980 |      1985 |
| DD   | RESH4 |       1995 |      1999 |
| AA   | RESH4 |       1992 |      1999 |
| CCC  | RESH8 |       1989 |      1994 |
| EE   | RESH5 |       1988 |      1989 |
+------+-------+------------+-----------+

我正在尝试创建一个新表,其中将包含员工 s_name 以及每个人进行了多少不同的研究。

到目前为止我所拥有的是

select distinct s.s_name, count(r.s_id) 
from staff s 
inner join research r 
on s.s_id = r.s_id 
where s.s_id = r.s_id;

我的结果是,

+---------+---------------+
| s_name  | count(r.s_id) |
+---------+---------------+
| Jason   |             6 |
+---------+---------------+

我做错了什么?

提前致谢。

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    我认为这样可以:

    select s.s_name, count(*) 
    from staff s 
    inner join research r 
    on s.s_id = r.s_id 
    group by r.s_id
    

    【讨论】:

    • 此查询不适用于上述示例。由于您按 r.s_id 对员工姓名“Jason”进行分组,因此 r_id 的计数将为 1
    • 哇哦!感谢 Sashi Kant 的快速回复。不知道 grub by 声明。现在,我会牢记在心。您能否向我解释一下,为什么我们在 count() 中有星号?没明白那个点。再次感谢! :)
    • @AnandPhadke:请先检查我的查询,分组是在 s_id 上完成的,这将返回 count=2 for 'jason'
    • 哦,好的,我明白了。现在它允许我删除我的反对票,因为您必须编辑答案。
    • @AnandPhadke:没问题 yaar...:-)
    【解决方案2】:

    比较Staff表和research表的S_ID数据类型。任何一张表中都可能有空格。否则,在您的连接条件中使用Trim 函数,这样可能会收到正确的结果集。

    您的查询仅返回 Staff 表中的不同 ID。您应该在 SQL 语句中使用group by

    希望这会有所帮助!

    【讨论】:

    • 不知道 group by 子句!现在我知道了!非常有用,谢谢@Gowdhaman008
    猜你喜欢
    • 2020-04-06
    • 2015-06-13
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多