2011-03-31 141 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。