【发布时间】:2015-03-25 07:16:50
【问题描述】:
我有一个奇怪的架构,但在设计时它在当时似乎是个好主意。我有一个 master 表,lesson_objects,它具有链接到词汇表、视频表和测验表的外键。
词汇表:
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`)
)
我正在尝试创建一个查询,该查询返回来自课程对象的所有记录,但还包括该记录中类型(词汇等)的列中的数据
例如:
只有我的查询不返回任何行,而理想情况下它应该变成多行,每条记录都包含一些空列。例如。如果不是词汇,则测验和视频的列将为空。
我的尝试非常糟糕,但为了指导,这里有一个:
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
任何帮助/cmets 将不胜感激。谢谢。
【问题讨论】:
-
显示示例数据或创建一个 sqlfiddle
-
请发布预期的结果格式。
-
MySQL 或/和 SQL Server?不要标记未涉及的产品!
-
@jarlh 从技术上讲,它是 Google SQL 存储,但这不是一个选项,所以它是 SQL 和 mysql 的混合体(我最好的选择)。抱歉,我没有尝试发送垃圾邮件。
标签: mysql sql sql-server join inner-join