Почему мой запрос возвращает «Пустое множество (0,00 сек)»? - PullRequest
0 голосов
/ 08 апреля 2019

УСТАНОВЛЕНО-ОБНОВЛЕНО здание ОБНОВЛЕНИЕ SET building_name = "Здание главной улицы" ГДЕ building_id = 2; Оттуда запрос задачи 3 вернет правильные результаты.

Задача первая:

Запрос:

SELECT first_name, last_name, building_name, room.room_id, meeting_start,meeting_end
FROM meeting, person, person_meeting,room, building
WHERE room.room_id=meeting.room_id
AND meeting.meeting_id=person_meeting.meeting_id
AND person.person_id=person_meeting.person_id
AND room.building_id=building.building_id
AND person.first_name='Tom'
AND person.last_name='Hanks';

Задание второе:

Запрос:

SELECT first_name, last_name, building_name, room.room_id, meeting_start,meeting_end
FROM meeting, person, person_meeting,room, building
WHERE room.room_id=meeting.room_id
AND meeting.meeting_id=person_meeting.meeting_id
AND person.person_id=person_meeting.person_id
AND room.building_id=building.building_id
AND meeting.meeting_id=2;

Задание третье:

Запрос:

SELECT first_name, last_name, building_name, room.room_id,meeting.meeting_id, meeting_start, meeting_end
FROM meeting, person, person_meeting,room, building
WHERE room.room_id=meeting.room_id
AND meeting.meeting_id=person_meeting.meeting_id
AND person.person_id=person_meeting.person_id
AND room.building_id=building.building_id
AND building_name='Main Street Building';

Задание четвертое:

Запрос:

SELECT count(person_id) 'Count of meeting attendees', meeting.meeting_id,meeting_start,meeting_end
FROM meeting, person_meeting
WHERE meeting.meeting_id=person_meeting.meeting_id
GROUP BY meeting.meeting_id;

Задание пятое:

Запрос:

SELECT first_name, last_name, meeting.meeting_id, meeting_start, meeting_end
FROM meeting INNER JOIN person_meeting ON meeting.meeting_id=person_meeting.meeting_id
INNER JOIN person ON person.person_id=person_meeting.person_id
AND meeting_start<'2016-12-25 12.00.00';

Задания 1, 2, 4, 5 и 5 выполняются отлично. если вам всем нужны подсказки задачи, дайте мне знать.

1 Ответ

0 голосов
/ 08 апреля 2019

Примечание: я еще не проверял это.

Я изменил запросы, основываясь на нашем недавнем взаимодействии.

Это ваш оригинальный

SELECT first_name, last_name, building_name, room.room_id,meeting.meeting_id, meeting_start, meeting_end    
FROM meeting, person, person_meeting,room, building    
WHERE room.room_id=meeting.room_id    
    AND meeting.meeting_id=person_meeting.meeting_id    
    AND person.person_id=person_meeting.person_id    
    AND room.building_id=building.building_id    
    AND building_name='Main Street Building';

Вот как я бы попытался его построить

На основе предоставленных вами страниц 2 и 3 в документе https://snhu.brightspace.com/d2l/lor/viewer/viewFile.d2lfile/76437/9523,2/, Я бы сделал следующее:

Сначала я бы получил информацию о здании.

SELECT building_id
FROM building
WHERE building_name like  '%Main Street Building%';

Примечание: я предполагаю, что название здания является правильным.Однако на всякий случай я использую подстановочный знак% до и после имени

Далее я получу информацию о комнате:

SELECT b.building_name, r.room_id
FROM room r
  LEFT JOIN building b
    ON r.building_id = b.building_id
WHERE b.building_name like  '%Main Street Building%';

После этого яполучит информацию о собрании:

SELECT b.building_name, r.room_id, m.meeting_id, m.meeting_start, m.meeting_end
FROM room r
  LEFT JOIN building b
    ON r.building_id = b.building_id
  LEFT JOIN meeting m
    ON r.room_id = m.room_id
WHERE b.building_name like  '%Main Street Building%';

Наконец, я получу информацию об идентификаторах людей, которые будут присутствовать на этом собрании, и покажу их имена:

SELECT b.building_name, r.room_id, m.meeting_id, m.meeting_start, m.meeting_end, p.first_name, p.last_name
FROM room r
  LEFT JOIN building b
    ON r.building_id = b.building_id
  LEFT JOIN meeting m
    ON r.room_id = m.room_id
  LEFT JOIN persom_meeting pm
    ON m.meeting_id = pm.meeting_id
  LEFT JOIN person p
    ON pm.person_id = p.person_id
WHERE b.building_name like  '%Main Street Building%';

ЕслиВ любом случае, эти запросы не работают, я бы посоветовал вам убедиться, что между таблицами существуют отношения.

Это означает, что должно быть совпадение building_id, совпадение room_id, совпадение meeting_id и person_idсовпадение между таблицами.Кроме того, я бы проверил, что имя здания написано правильно, поскольку оно чувствительно к регистру.

Причина, по которой я использую LEFT JOINs, заключается в том, что я могу отображать всю информацию предыдущих таблиц (все строки) плюс записив котором идентификаторы соответствуют идентификаторам внешних ключей.Как объяснено здесь: http://www.acarlstein.com/?p=4168

enter image description here

Кроме того, в http://www.acarlstein.com/?p=4194, я показываю, как будут работать два левых (внешних) объединения.

enter image description here

Однако в вашем случае это больше похоже на строящуюся цепочку, поэтому она не соответствует диаграмме, но вы, возможно, можетепонять, что я имею в виду.

...