2011-03-31 105 views
0

我正在处理日历系统。我们正在使用德比。 我正在写一个脚本来问(在我看来)一个非常困难的逻辑陈述。 我一直在阅读derbys的说明,但似乎无法找到一些指示。 当我提出逻辑时,我已经使用'Antijoin',看起来德比并不支持这一点。 对我的问题。在下面的图片中。那声明会是什么? 由于Derby不支持'Antijoin',因为我们做了很多其他的查询,所以会更改数据库表。对不起,它不是用英文书写的,但标志是国际性的。我还在比较脚本中的一些变量。逻辑就像它在那里一样,只是我很难在Derby sql中编写它。德比数据库查询

在图中有关系。我不必使用反加入,但不能用另一种方式解决问题。

enter image description here

编辑:有不使用的图片,所以我会解释的问题。 现在它是英文版,所以如果你在我翻译的图片上看到不同的名字。

涉及到两个表格。

ROOMNAME numberOfPeople 描述

会议

(还有更多的在这里,但我只会写什么是重要的) ROOMNAME meetingStart meetingEnd

的查询找巫婆房间也可用于会议。

我设计的是,我只会从会议表中选择与您正在尝试创建的房间的新预订相冲突的会议。在我看来,你不能这样做。它看起来像这样: reservationStart> meetingStart和meetingEnd> reservationEnd

然后,我将与所有房间的列表“加入”。这将列出所有可用的房间。问题在于,似乎德比不能抗争。是否有另一种方法与其他连接建立一个反连接?希望你明白我在写

EDIT2:

I'mnot得到任何错误,因为我还没有尝试过任何疑问。我一直在努力做的查询和我得到了什么迄今为止是这样的:

SELECT roomName, numberOfPeople, description FROM ROOM WHERE roomName NOT IN (SELECT roomName, meetingStart, meetingEnd FROM Meeting WHERE reservationEnd > meetingStart AND meetingEnd > reservationStart); 

但是从我一直在读什么也没有在德比“NOT IN”。我如何更改查询?

编辑3:

我有查询。我现在得到的错误代码是这样的:

错误42X39:子查询只允许返回一个列。

+1

请发布您正在尝试使用的实际SQL,理想情况下涉及的表的定义(纯文本**不作为屏幕截图) – 2011-03-31 14:42:34

+0

并且还会发布您从德比获得的实际错误。 – 2011-04-01 18:33:25

回答

1

你得到`错误42X39:子查询只被允许返回单列“,因为你的子查询

SELECT roomName, meetingStart, meetingEnd FROM Meeting WHERE reservationEnd > meetingStart AND meetingEnd > reservationStart 

回报3列(ROOMNAME,meetingStart,meetingEnd)。

为了使NOT IN仅工作1列是允许的。子查询将创建一组值,并且只有一列中的值才能写入该组。

您需要的子查询更改为:从满足毫秒

SELECT roomName FROM Meeting WHERE reservationEnd > meetingStart AND meetingEnd > reservationStart 
0

要查找房间忙于开会,
SELECT roomNames,预留RS其中rs.reservationEnd> ms.meetingStart和ms.meetingEnd> rs.reservationStart
现在可以找到客房,你可以抗联
从房间 SELECT roomNames。