【问题标题】:Problems with joining two tables连接两个表的问题
【发布时间】:2015-08-24 06:51:25
【问题描述】:

我目前正在使用 C# 制作应用程序,但在连接两个表时遇到了一些困难。为了让事情更清楚,这里是我的表结构

表1(员工名单)

| EmployeeID | EmployeeName |
+------------+--------------+
|     1      | John Smith   |
|     2      | Ian Smosh    |

表2(推荐人名单)

| PersonalID | InviterID | InterviewerID | 
+------------+-----------+---------------+
|     1      |   1       |       1       | 
|     2      |   1       |       2       | 

Datagridview 上的输出应该是

| Employee Name | Invites | Interviews | 
+---------------+---------+------------+
| John Smith    | 2       |      1     | 
| Ian Smosh     | 0       |      1     | 

我目前能够同时获得邀请,但不能同时获得采访。我只能得到一个。

这是我得到的

| Employee Name | Invites | 
+---------------+---------+
|  John Smith   |  2      | 
|  Ian Smosh    |  0      | 

这是我的代码:

SELECT Table1.RecruiterName AS Name, 
    COUNT(Table2.InviterID) AS Invites, 
    COUNT(Table2.InterviewID) AS Interviews 
FROM Table2 LEFT JOIN Table1 ON Table2.InviterID = Table1.EmployeeID 
    AND Table2.InterviewerID = Table1.InviterID 
GROUP BY EmployeeName

有人知道我的代码有什么问题吗?

更新:我设法让它变得更好一点,但我一直在进步

| Employee Name | Invites | Interviews | 
+---------------+---------+------------+
| John Smith    | 2       |      2     | 
| Ian Smosh     | 0       |      1     |

John Smith 的条目只有 2 个邀请和 1 个采访。这是我当前的代码

SELECT Recruiters.RecruiterName AS Name, COUNT(Source.SourceID) AS Source, COUNT(Interview.InterviewID) AS Interview 
FROM Recruiters 
LEFT JOIN Hires Source ON Source.SourceID=Recruiters.RecruiterID 
LEFT JOIN Hires Interview ON Interview.InterviewID=Recruiters.RecruiterID
GROUP BY RecruiterName

为什么约翰·史密斯在采访中得到的分数是错误的,而伊恩·斯莫什却是正确的。

【问题讨论】:

  • 您应该将其标记为 sql,因为它是 sql 问题而不是 c#
  • 哦,对不起..我使用的是 C#.NET,忘记删除标签 xD,谢谢 :)
  • 因为2次邀请导致1次面试被计算两次
  • 请出示正确名称和正确记录的表格。
  • 飞盘是对的!我改变了我的答案,但飞盘的版本可以更快。检查一下!

标签: sql sql-server join


【解决方案1】:

双连接是双浸
这应该工作

select employee.EmployeeName, inv.count, int.count 
  from employee 
  join ( select InviterID, 
                count(*) as count 
           from referral 
          group by InviterID     ) as inv 
    on employee.employeeID = inv.InviterID 
  join ( select InterviewerID, 
                count(*) as count 
           from referral 
          group by InterviewerID ) as int 
    on employee.employeeID = int.InterviewerID 

【讨论】:

  • 这个解决方案是正确的!感谢 Frisbee ;) 也感谢 @knagaev 的努力 :)
【解决方案2】:
SELECT Recruiters.RecruiterName AS Name,
(select COUNT(*) from Hires where SourceID = Recruiters.RecruiterID) AS Source,
(select COUNT(*) from Hires where InterviewID = Recruiters.RecruiterID) AS Interview
FROM Recruiters

【讨论】:

  • 让我测试一下;)
  • 我不需要将其设为 Table2 作为邀请者吗?
  • 你把表条目弄乱了@_@ Table1.InviterID?那是表 2 :( 你查看我的帖子了吗 ;(
  • 邀请人和面试官是一列..不是表格..只有2个表格
  • 我重新检查了表格的名称并更正了,对不起。
猜你喜欢
  • 1970-01-01
  • 2022-12-26
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2010-11-12
  • 1970-01-01
相关资源
最近更新 更多