Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 确保员工不';I don’我不能同时参与最多2个项目_Sql_Sql Server - Fatal编程技术网

Sql 确保员工不';I don’我不能同时参与最多2个项目

Sql 确保员工不';I don’我不能同时参与最多2个项目,sql,sql-server,Sql,Sql Server,很抱歉问了这么愚蠢的问题。一般来说,我对SQL是相当陌生的 问题是:我有两张桌子 CREATE TABLE [dbo].[Projects] ( [name] VARCHAR (30) NOT NULL, [company] VARCHAR (200) NOT NULL, [manager] VARCHAR (30) NOT NULL, [start_date] DATETIME NOT NULL, [end_dat

很抱歉问了这么愚蠢的问题。一般来说,我对SQL是相当陌生的

问题是:我有两张桌子

CREATE TABLE [dbo].[Projects] 
(
    [name]       VARCHAR (30)  NOT NULL,
    [company]    VARCHAR (200) NOT NULL,
    [manager]    VARCHAR (30)  NOT NULL,
    [start_date] DATETIME      NOT NULL,
    [end_date]   DATETIME      NULL,

    PRIMARY KEY CLUSTERED ([name] ASC, [company] ASC),

    FOREIGN KEY ([company]) 
        REFERENCES [dbo].[Companies] ([email]) 
        ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY ([manager]) 
        REFERENCES [dbo].[Managers] ([username]) 
);

CREATE TABLE [dbo].[Manager_assign_Regular_Employee_Project] 
(
    [project_name]     VARCHAR (30)  NOT NULL,
    [company]          VARCHAR (200) NOT NULL,
    [regular_employee] VARCHAR (30)  NOT NULL,
    [manager]          VARCHAR (30)  NOT NULL,

    PRIMARY KEY CLUSTERED ([project_name] ASC, [company] ASC, [regular_employee] ASC),

    FOREIGN KEY ([project_name], [company]) 
        REFERENCES [dbo].[Projects] ([name], [company]) 
        ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY ([regular_employee]) 
        REFERENCES [dbo].[Regular_Employees] ([username]),
    FOREIGN KEY ([manager]) 
        REFERENCES [dbo].[Managers] ([username]) 
);
我想确保一名员工不会同时在两个以上的项目中工作

例如:

p1 regular1 STARTDATE=1/1/2017 ENDDATE=1/5/2017
p2 regular1 STARTDATE 1/5/2017 ENDDATE=1/20/2017
这两个记录可以保留,但如果我添加另一个与2个即3个项目同时相交的记录,则应该拒绝


我试图在2个项目表和第二个项目表之间进行连接,但失败得很惨

在开始编写代码之前,您需要弄清楚应该做什么。你说“我想确定……”。请描述一下你的过程。当别人不知道你到底想做什么时,向他们征求建议是没有用的

既然这是一门课,你应该自己去弄清楚。给定两个作业行,您如何知道它们是否重叠?有时在纸上画东西会有帮助。绘制一个包含时间跨度的时间线。比如说1月1日到6月30日。现在在这个时间线上画一条线,代表一个随机的时间段。2月5日至3月15日。接下来,绘制一个重叠和不重叠第一个周期的周期范围。现在查看每个“建议的”时段(2到5),并确定需要什么逻辑来确定找到重叠的时段所需的逻辑,忽略不重叠的时段。此类图纸的一个示例是

提示-您比较开始到结束和结束到开始。暂时忽略空值以使事情变得更简单。另一个提示-将这些行放入表中,并编写查询以查找哪些行与第1行重叠


还有一条评论。否-您的样本数据不正常。结束日期是员工在项目上工作的最后一天。因此,同一名员工也不能在不同的项目上开始工作。这是重叠。您的日期必须包括在内。否则,你将面临一个充满问题的世界。如果您只关心日期,那么不要使用DATETIME列。考虑用于列的正确数据类型。不要只是出于习惯或懒惰而把东西拼凑在一起。模式还有其他问题,但每次只关注一件事

你尝试了什么,得到了什么结果?你期待什么结果?您的代码是MySQL还是MS-SQL?如果您的问题与SQL Server有关,则可能需要对此进行不同的标记。(编辑:看起来Ramond已经帮你做了标记。谢谢。)我已经将标记从MySQL更改为SQL server。因为这显然是SQL server语法。我尝试将2个项目表与Manager\u assign\u Regular\u Employee\u Project表连接起来,检查p1是否与p2的日期重叠,并在发生此情况时计数happens@MohamedHeshamIbrahim你喜欢问/回答一千个问题吗?为什么不能使用触发器?在某些情况下,您必须编写代码,要么在插入/更新时强制执行您的需求,要么编写在插入/更新之前执行相同操作的逻辑。你选择……如果他们不这样做,那真是太遗憾了,这只是说说而已。