Запрос базы данных Derby - PullRequest
       6

Запрос базы данных Derby

0 голосов
/ 31 марта 2011

Я работаю в календарной системе. Мы используем дерби. Я пишу сценарий, чтобы спросить (на мой взгляд) очень жесткое логическое утверждение. Я читал в инструкции по Derbys, но не могу найти какую-то инструкцию. Я использовал «Antijoin», когда сделал логику, и кажется, что дерби-доза не поддерживает это. На мой вопрос. На картинке ниже. Что это за заявление? Было бы плохо изменить таблицы базы данных, потому что дерби не поддерживает Antijoin, потому что мы сделали так много других запросов. Мне жаль, что это не написано на английском языке, но знаки являются международными. Я также сравниваю некоторые переменные из скрипта. Логика работает так, как она есть, просто мне трудно написать ее в Derby sql.

На картинке изображены отношения. Мне не нужно использовать противодействие, но я не могу найти способ решить его.

enter image description here

РЕДАКТИРОВАТЬ: Возник вопрос, чтобы не использовать картинку, поэтому я объясню. Это теперь на английском, поэтому, если вы видите разные имена на фотографиях, я перевёл это.

Здесь задействованы две таблицы.

номер

roomName число людей описание

Встреча

(здесь есть еще что-то, но я напишу только то, что важно) название комнаты meetingStart meetingEnd

Вопрос в том, чтобы найти комнаты для ведьм, которые также используются для собрания.

Я разработал так, чтобы я выбирал из таблицы собраний только те собрания, которые вступают в конфликт с новым резервированием комнаты, которую вы пытаетесь сделать. Вы не можете сделать это наоборот, по моему мнению. Это выглядит так: bookingStart> meetingStart AND meetingEnd> резервированиеEnd

Тогда я буду «противодействовать» спискам всех комнат. Это сделает список всех доступных комнат. Проблема в том, что, похоже, Дерби не может противостоять. Есть ли другой способ создать антисоединение с другими объединениями? Надеюсь, вы понимаете, что я пишу

EDIT2:

Я не получаю никакой ошибки, потому что я не пробовал никаких запросов. Я работал над созданием запроса, и до сих пор получаю следующее:

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

Но из того, что я читал, в Дерби нет «НЕ В». Как я могу перефразировать запрос?

РЕДАКТИРОВАТЬ 3:

Я получил запрос. Код ошибки, который я получаю сейчас, таков:

ОШИБКА 42X39: Подзапросу разрешено возвращать только один столбец.

Ответы [ 3 ]

1 голос
/ 01 декабря 2011

Вы получаете `ОШИБКА 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 голосов
/ 12 июля 2015

Чтобы найти комнаты, занятые совещаниями,
ВЫБЕРИТЕ имя комнаты из собрания мс, резервирование rs, где rs.reservationEnd> ms.meetingStart AND ms.meetingEnd> rs.reservationStart
теперь, чтобы найти свободные номера, вы можете antijoin с
ВЫБЕРИТЕ имя комнаты из комнаты .

0 голосов
/ 03 апреля 2011

NOT IN отлично работает в дерби.Вот где вы можете найти его в документах: http://db.apache.org/derby/docs/10.7/ref/rrefsqlj23075.html#rrefsqlj23075

Какой фактический запрос вы отправляете и какую ошибку вы получаете?

...