我有以下模式使用多个选择从不同的表连接数据
CREATE TABLE years (
year_id INT NOT NULL AUTO_INCREMENT,
year_name_in_nums int NOT NULL,
year_name_in_text varchar(255) NOT NULL,
PRIMARY KEY (year_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE classes (
class_id INT NOT NULL AUTO_INCREMENT,
class_name varchar(255) NOT NULL,
PRIMARY KEY (class_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE students (
student_id INT NOT NULL AUTO_INCREMENT,
student_names varchar(255) NOT NULL,
student_telephone_number int NOT NULL,
PRIMARY KEY (student_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE terms (
term_id INT NOT NULL AUTO_INCREMENT,
term_name_in_nums int NOT NULL,
term_name_in_text varchar(255) NOT NULL,
term_year int NOT NULL,
PRIMARY KEY (term_id),
FOREIGN KEY (term_year) REFERENCES years(year_id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE class_students (
cs_id INT NOT NULL AUTO_INCREMENT,
cs_class_student int NOT NULL,
cs_class_id int NOT NULL,
cs_term_id int NOT NULL,
PRIMARY KEY (cs_id),
FOREIGN KEY (cs_class_student) REFERENCES students(student_id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (cs_class_id) REFERENCES classes(class_id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (cs_term_id) REFERENCES terms(term_id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
我希望显示条款表term_name_in_nums
和year_name_in_nums
从几年表
我检索到的数据这样
(select term_name_in_nums,term_year from terms INNER JOIN class_students ON term_id=cs_term_id);
从上面可以看出,term_year
是一个FOREIGN KEY(term_year),其参考年(year_id)
我想这
(select term_name_in_nums from terms INNER JOIN class_students ON term_id=cs_term_id)
LEFT JOIN
(select term_year from terms INNER JOIN class_students ON term_id=cs_term_id);
这给了我一个SQL语法error.How我能解决这个问题?
编辑:数据
-- --------------------------------------------------------
-- Host: 127.0.0.1
-- Server version: 5.6.11 - MySQL Community Server (GPL)
-- Server OS: Win32
-- HeidiSQL Version: 8.0.0.4396
-- --------------------------------------------------------
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-- Dumping data for table algo.classes: ~10 rows (approximately)
/*!40000 ALTER TABLE `classes` DISABLE KEYS */;
INSERT IGNORE INTO `classes` (`class_id`, `class_name`) VALUES
(1, '1'),
(2, '2'),
(3, '3'),
(4, '4'),
(5, '5'),
(6, '6'),
(7, '7'),
(8, '8'),
(9, '9'),
(10, '10');
/*!40000 ALTER TABLE `classes` ENABLE KEYS */;
-- Dumping data for table algo.class_students: ~16 rows (approximately)
/*!40000 ALTER TABLE `class_students` DISABLE KEYS */;
INSERT IGNORE INTO `class_students` (`cs_id`, `cs_class_student`, `cs_class_id`, `cs_term_id`) VALUES
(1, 1, 1, 1),
(2, 1, 1, 1),
(3, 2, 1, 1),
(4, 3, 1, 1),
(5, 4, 1, 1),
(6, 5, 1, 1),
(7, 6, 1, 1),
(8, 7, 1, 1),
(9, 8, 1, 1),
(10, 9, 1, 1),
(11, 10, 1, 1),
(12, 11, 1, 1),
(13, 12, 1, 1),
(14, 13, 1, 1),
(15, 14, 1, 1),
(16, 15, 1, 1);
/*!40000 ALTER TABLE `class_students` ENABLE KEYS */;
-- Dumping data for table algo.examinations: ~3 rows (approximately)
/*!40000 ALTER TABLE `examinations` DISABLE KEYS */;
INSERT IGNORE INTO `examinations` (`examination_id`, `examination_name`, `examination_term_id`) VALUES
(1, 'start of term', 1),
(2, 'mid term', 1),
(3, 'end of term', 1);
/*!40000 ALTER TABLE `examinations` ENABLE KEYS */;
-- Dumping data for table algo.examination_data: ~0 rows (approximately)
/*!40000 ALTER TABLE `examination_data` DISABLE KEYS */;
/*!40000 ALTER TABLE `examination_data` ENABLE KEYS */;
-- Dumping data for table algo.students: ~20 rows (approximately)
/*!40000 ALTER TABLE `students` DISABLE KEYS */;
INSERT IGNORE INTO `students` (`student_id`, `student_names`, `student_telephone_number`) VALUES
(1, 'aa', 123456),
(2, 'bb', 5576899),
(3, '23050359165419520', 788399),
(4, '23050359165419521', 7892020),
(5, '23050359165419522', 33772),
(6, '23050359165419523', 86729),
(7, '23050359165419524', 526890),
(8, '23050359165419525', 444332),
(9, '23050359165419526', 937678),
(10, '23050359165419527', 44),
(11, '23050359165419528', 774),
(12, '23050359165419529', 2147483647),
(13, '23050359165419531', 2147483647),
(14, '23050359165419533', 2147483647),
(15, '23050359165419535', 353657674),
(16, '23050359165419536', 436),
(17, '23050359165419537', 5467),
(18, '23050359165419538', 565788),
(19, '23050359165419539', 548759898),
(20, '23050359165419540', 2443);
/*!40000 ALTER TABLE `students` ENABLE KEYS */;
-- Dumping data for table algo.terms: ~10 rows (approximately)
/*!40000 ALTER TABLE `terms` DISABLE KEYS */;
INSERT IGNORE INTO `terms` (`term_id`, `term_name_in_nums`, `term_name_in_text`, `term_year`) VALUES
(1, 1, 'term one', 1),
(2, 2, 'term two', 2),
(3, 3, 'term three', 3),
(4, 4, 'term four', 4),
(5, 5, 'term five', 5),
(6, 6, 'term six', 6),
(7, 7, 'term seven', 7),
(8, 8, 'term eight', 8),
(9, 9, 'term nine', 9),
(10, 10, 'term ten', 10);
/*!40000 ALTER TABLE `terms` ENABLE KEYS */;
-- Dumping data for table algo.years: ~15 rows (approximately)
/*!40000 ALTER TABLE `years` DISABLE KEYS */;
INSERT IGNORE INTO `years` (`year_id`, `year_name_in_nums`, `year_name_in_text`) VALUES
(1, 2000, '2000/2001'),
(2, 2001, '2001/2002'),
(3, 2002, '2002/2003'),
(4, 2003, '2003/2004'),
(5, 2004, '2004/2005'),
(6, 2005, '2005/2006'),
(7, 2006, '2006/2007'),
(8, 2007, '2007/2008'),
(9, 2008, '2008/2009'),
(10, 2009, '2009/2010'),
(11, 2010, '2010/2011'),
(12, 2011, '2011/2012'),
(13, 2012, '2012/2013'),
(14, 2013, '2013/2014'),
(15, 2014, '2014/2015');
/*!40000 ALTER TABLE `years` ENABLE KEYS */;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
错误输出是什么? –
'/ * SQL错误(1064):您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,在'LEFT JOIN (从INNER JOIN中选择term_year class_students ON term_year ='在第2行* /' –
')附近使用正确的语法什么是年份ID?是它的*自己的*编号!?!?! – Strawberry