我有一個奇怪的模式,但是當它被設計時,它似乎是一個好主意。我有一個主表,lesson_objects
,它有外鍵鏈接到詞彙,視頻和測驗表。多個SQL加入困難查詢
詞彙表:
CREATE TABLE `se_vocab` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`vocab_word` VARCHAR(255) NOT NULL,
`vocab_audio` INT(10) NULL DEFAULT '0',
`vocab_image` INT(10) NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
視頻表:
CREATE TABLE `se_video` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`video_name` VARCHAR(255) NOT NULL,
`video_description` MEDIUMTEXT NOT NULL,
`video_file_name` VARCHAR(50) NULL DEFAULT NULL,
`video_url` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
)
測驗表:
CREATE TABLE `se_quizzes` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`quiz_name` VARCHAR(80) NOT NULL,
`quiz_description` TINYTEXT NULL,
PRIMARY KEY (`id`)
)
教訓的對象(包括先前的表的外鍵)
CREATE TABLE `se_lesson_org` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`lesson_id` INT(10) NOT NULL,
`section_object_type` ENUM('video','vocabulary','quiz') NOT NULL,
`section_object_id` INT(10) NOT NULL,
PRIMARY KEY (`id`)
)
我試圖創建一個從lesson_objects返回所有記錄的查詢,但也包括在該記錄類型的列中的數據(詞彙等)
例如:
只有我的查詢不返回行,而最好應該把多行包含若干空列的每個記錄。例如。如果它不是詞彙表,測驗和視頻的列將爲空。
我的企圖是非常糟糕的,但這裏是一個指導的緣故:
SELECT
lo.id, lo.section_object_type, lo.section_object_id,
vo.id, vo.vocab_text, vo.vocab_image, vo.vocab_audio
vi.id, vi.video_name, vi.video_url,
q.id, q.quiz_name
FROM se_lesson_org lo, se_vocab vo, se_video vi, se_quizzes q
WHERE lo.section_object_id = vo.id
OR lo.section_object_id = vi.id
OR lo.section_object_id = q.id
任何幫助/意見將不勝感激。謝謝。
顯示樣本數據或創建一個sqlfiddle – Jens 2015-03-25 07:18:59
請張貼預期的結果格式。 – 2015-03-25 07:19:30
MySQL或/和SQL Server?不要標記不涉及的產品! – jarlh 2015-03-25 07:44:02