2017-06-01 70 views
1

下面是我的SQL表:多个内部子查询没有返回预期

CREATE TABLE [dbo].[My_Employee_Schedule] (
[Emp_Sch_Id] INT  IDENTITY (1, 1) NOT NULL, 
[Schedule_Date] DATETIME NULL, 
[Start_Time] DATETIME NULL, 
[End_Time]  DATETIME NULL, 
[Emp_ID]  INT  NULL, 
[Job_ID]  INT  NULL, 
PRIMARY KEY CLUSTERED ([Emp_Sch_Id] ASC), 
FOREIGN KEY ([Emp_ID]) REFERENCES [dbo].[My_Employee] ([Employee_Id]) ON DELETE CASCADE, 
FOREIGN KEY ([Job_ID]) REFERENCES [dbo].[My_Job_Type] ([Job_Type_Id]) ON DELETE CASCADE 
); 

CREATE TABLE [dbo].[My_Job_Type] (
[Job_Type_Id] INT   IDENTITY (1, 1) NOT NULL, 
[Job_Title] NVARCHAR (50) NOT NULL, 
PRIMARY KEY CLUSTERED ([Job_Type_Id] ASC) 
); 

我创建ASP.NET C#web应用程序,并正尝试做与此数据如下:

E采用的FK
  • 显示Schedule_Date在外ASP中继器
  • 然后显示JOB_TITLE(FROM THE My_Job_Type表) mployee_Schedule表。

而不是显示与下面几天连接的作业,所有作业正在显示。

这里是我当前的SQL(这是显示 “服务员”, “驱动程序” & “布瑟”):

SELECT Job_Title 
FROM My_Job_Type 
WHERE Job_Type_Id IN (
    SELECT Job_Id 
    FROM My_Employee_Schedule 
    WHERE Schedule_Date IN (
     SELECT DISTINCT CAST(Schedule_Date AS DATE) As Schedule_Date 
     FROM My_Employee_Schedule 
     WHERE Start_Time BETWEEN @startReportDate AND @endReportDate)) 

下面是电流输出,我有: snip1

这里是当前数据:

Emp_Sch_Id Schedule_Date START_TIME END_TIME EMP_ID JOB_ID

1 2017年3月6日00:00:00 2017年3月6日九点00分00秒2017年3月6日10:00:00 5 2

2 2017年3月6日00:00 :00 03/06/2017 11:30:00 03/06/2017 12:30:00 6 1

3 03/06/2017 00:00:00 03/06/2017 14:00:00 03/06/2017 15:00:00 5 3

4 03/06/2017 00:00:00 03/06/2017 12:00:00 03/06/2017 13:00:00 4 2

5 03/06/2017 00:00:00 03/06/2017 12:15:00 03/06/2017 15:15:00 4 2

Job_Type_Id JOB_TITLE

1服务员

2驱动

3布瑟

+0

在My_Job_Type表中,“Waiter”,“Driver”和“Busser”是唯一的行。我认为这个当前的SQL语句显示了每个div中的所有行。但是,Job_Id [外键]在Employee_Schedule表中的每一行附加了一个特定的Job。我不想在每个div中显示,而只想显示其FK与Employee_Schedule行关联的作业。 – user2911539

+0

例如,只有_Waiter_应显示在星期六下方,因为Schedule_Date的_Employee_Schedule_行是3/6/2017,其** Job_ID **等于1 – user2911539

+1

您可以将数据发布到这些表中吗?没有它,我们很难知道结果是否正确。 – scsimon

回答

1

据我所知,好像你只需要一个inner join与嵌套子无关查询。

select distinct 
    t.Job_Title 
from 
    My_Job_Type t 
    inner join 
     My_Employee_Schedule s on 
     s.Job_ID = t.Job_Type_ID 
where 
    s.Schedule_Date between @startReportDate and @endReportDate 
+0

非常感谢那个解决方案。如果我想现在在Job_Title下显示Employee_Name,是否需要另一个连接?顺便说一下,Employee_Name是Employee表中的一列,上面的Emp_ID是FK。 – user2911539

+1

可能因为我没有在您提供的任何表格中看到员工姓名。我猜它会加入My_Employee_Schedule表使用Emp_ID列.... – scsimon

+0

如果我张贴我上面的附加表,你是否能够更新你的答案,包括解决方案呢?由于它仍然属于多个子查询类别? – user2911539