MySQL Как получить имя таблицы в виде поля - PullRequest
1 голос
/ 28 ноября 2011

Я не уверен, как точно сформулировать мою проблему, но я буду стараться изо всех сил. Я пытаюсь смоделировать базу данных для автошколы. У меня есть таблица «временного интервала», так что такие действия, как уроки, тесты и регистрационные собеседования, могут быть связаны с заданным временным интервалом для сотрудника. Один из запросов, который я задаю, - это возможность просмотреть «расписание» событий для сотрудника. Я построил запрос, и он работает, однако он объединяет данные из различных других таблиц, и я хотел бы увидеть имена этих таблиц, чтобы знать, для какой деятельности зарезервирован временной интервал.

Модель ER

Запрос, который я выполняю для проверки штатного расписания, следующий:

SELECT Timeslot.*
FROM Timeslot
LEFT JOIN Test
ON Timeslot.Timeslot_ID = Test.Timeslot
LEFT JOIN Interview
ON Timeslot.Timeslot_ID = Interview.Timeslot
LEFT JOIN Lesson
ON Timeslot.Timeslot_ID = Lesson.Timeslot
WHERE Timeslot.Date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 7 DAY)
AND Timeslot.Staff = 1;

Это работает и показывает список всех зарегистрированных временных интервалов для данного сотрудника на следующую неделю. То, что я хотел бы, - это еще один столбец, который будет показывать, какой это вид деятельности, например, «Урок», «Интервью» или «Тест». Как вы можете видеть, я в настоящее время сохраняю это как поле в таблице временных интервалов, что означает, что я должен указывать это каждый раз, когда вставляю временной интервал. Я буду нормализовать базу данных до 3NF и хочу избежать дублирования. Есть ли способ, которым я смоделирую это, чтобы получить имя таблицы, я рассмотрел использование UNIONS и многих других вещей, но мог бы использовать некоторую помощь.

Большое спасибо и извинения, если это кажется немного расплывчатым. Mike

1 Ответ

4 голосов
/ 28 ноября 2011

Мой удар, если вы сохраняете модель, которую вы описали, будет с оператором Case, например:

Select Timeslot.*,
    Case
        When Test.Timeslot Is Not Null Then 'Test'
        When Interview.Timeslot Is Not Null Then 'Interview'
        When Lesson.Timeslot Is Not Null Then 'Lesson'
    End As ActivityType
From ...

Ваш запрос будет иметь столбец «ActivityType» всамый конец, который вы могли бы использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...