我有以下模式使用多個選擇從不同的表連接數據
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