2017-06-01 71 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